我可能以错误的方式寻找这个,但是:
有没有办法通过代码获取绑定的结果值?
可能有一些显而易见的东西,但我就是找不到它。
您只需要调用绑定的
ProvideValue
IServiceProvider
传递给方法...ProvideValue
返回一个 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);
不是很优雅,但它有效......
要获取与某项绑定的数据,在事件发生后,可以参考
DataContext
属性。这将返回绑定的数据项。
例如,我想在TextChanged事件中获取TextBox的文本。
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
...
}
这将为您获取列表绑定的值。对于点击事件等实用。