2010-10-07 51 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