我可能找错了方向,但是:有没有办法通过代码得到绑定的结果值?可能是很明显的东西,但我就是找不到。
uqdfh47h1#
您只需要调用绑定的ProvideValue方法。困难的部分是你需要传递一个有效的IServiceProvider给方法... * 编辑:事实上,那不是真的... ProvideValue返回BindingExpression,而不是绑定属性的值。*您可以使用以下技巧:
ProvideValue
IServiceProvider
BindingExpression
class DummyDO : DependencyObject{ public object Value { get { return (object)GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } } public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(object), typeof(DummyDO), new UIPropertyMetadata(null));}public object EvalBinding(Binding b){ DummyDO d = new DummyDO(); BindingOperations.SetBinding(d, DummyDO.ValueProperty, b); return d.Value;}...Binding b = new Binding("Foo.Bar.Baz") { Source = dataContext };object value = EvalBinding(b);
class DummyDO : DependencyObject
{
public object Value
get { return (object)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(object), typeof(DummyDO), new UIPropertyMetadata(null));
public object EvalBinding(Binding b)
DummyDO d = new DummyDO();
BindingOperations.SetBinding(d, DummyDO.ValueProperty, b);
return d.Value;
...
Binding b = new Binding("Foo.Bar.Baz") { Source = dataContext };
object value = EvalBinding(b);
不是很优雅,但是很有效...
qybjjes12#
要获取绑定到项目的数据,在事件发生后,可以引用DataContext属性。这将返回绑定的数据项。例如,我想在TextChanged事件中获取TextBox的文本。
DataContext
private void TextBox_TextChanged(object sender, TextChangedEventArgs e){ var box = sender as TextBox; var value = box.DataContext as ObjectName; // ObjectName being the type of object being bound in the list ...}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
var box = sender as TextBox;
var value = box.DataContext as ObjectName; // ObjectName being the type of object being bound in the list
这将获得绑定到列表的值。对于点击事件等很实用。
2条答案
按热度按时间uqdfh47h1#
您只需要调用绑定的
ProvideValue
方法。困难的部分是你需要传递一个有效的IServiceProvider
给方法... * 编辑:事实上,那不是真的...ProvideValue
返回BindingExpression
,而不是绑定属性的值。*您可以使用以下技巧:
不是很优雅,但是很有效...
qybjjes12#
要获取绑定到项目的数据,在事件发生后,可以引用
DataContext
属性。这将返回绑定的数据项。例如,我想在TextChanged事件中获取TextBox的文本。
这将获得绑定到列表的值。对于点击事件等很实用。