在代码中获取绑定结果

问题描述 投票:0回答:2

我可能以错误的方式寻找这个,但是:

有没有办法通过代码获取绑定的结果值?

可能有一些显而易见的东西,但我就是找不到它。

wpf data-binding
2个回答
11
投票

您只需要调用绑定的

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);

不是很优雅,但它有效......


0
投票

要获取与某项绑定的数据,在事件发生后,可以参考

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
    ...
}

这将为您获取列表绑定的值。对于点击事件等实用。

© www.soinside.com 2019 - 2024. All rights reserved.