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źć.
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źć.
Wystarczy zadzwonić pod metodę wiążącą
EDYCJA: faktycznie, to nie prawda ... ProvideValue
. Najtrudniejsze jest to, że musisz podać prawidłowy
IServiceProvider
dla metody ...
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 ...
Ach tak, to było to. Dzięki. – Inferis
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
@tobriand, nie jestem pewien, czy rozumiem ... Jaki jest twój przypadek użycia? –