2010-10-07 10 views
6

Jestem prawdopodobnie szukając tego w niewłaściwy sposób, ale:Get wyniku wiązania w kodzie

jest jakiś sposób, aby uzyskać wartość wynikową wiążącej za pomocą kodu?

Prawdopodobnie coś oczywistego, ale po prostu nie mogę go znaleźć.

Odpowiedz

9

Wystarczy zadzwonić pod metodę wiążącą ProvideValue. Najtrudniejsze jest to, że musisz podać prawidłowy IServiceProvider dla metody ... EDYCJA: faktycznie, to nie prawda ... ProvideValue zwraca wartość BindingExpression, a nie wartość powiązanej właściwości.

Można użyć następującej sztuczki:

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

Nie bardzo eleganckie, ale działa ...

+0

Ach tak, to było to. Dzięki. – Inferis

+0

Próbuję zrobić coś podobnego, ale wpadając na problemy, myślę, że muszę użyć RelativeSource. Jakikolwiek pomysł, jak uniknąć szacowania przez krewnych oceny w odniesieniu do DummyDO zamiast celu ukrytego w kontekście powiązania? – tobriand

+0

@tobriand, nie jestem pewien, czy rozumiem ... Jaki jest twój przypadek użycia? –

Powiązane problemy