2010-10-07 49 views
6

我可能在搜索错误方式,但是:获取代码中的绑定结果

是否有任何方法通过代码获取绑定的结果值?

也许有些明显的东西,但我无法找到它。

回答

9

您只需要调用绑定的 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

是啊,就是这样。谢谢。 – Inferis 2010-10-12 08:00:34

+0

我试图做类似的事情,但遇到问题,我想因为我需要使用RelativeSource。任何想法如何避免relativesource相对于DummyDO而不是绑定上下文中隐含的目标进行评估? – tobriand 2014-12-19 16:53:17

+0

@tobriand,我不知道我明白...你的用例是什么? – 2014-12-19 17:11:43

相关问题