Получить результат привязки в коде - PullRequest
7 голосов
/ 08 октября 2010

Я, вероятно, ищу это неправильный путь, но:

есть ли способ получить результирующее значение привязки через код?

Возможно, что-то явно очевидное, но япросто не могу его найти.

1 Ответ

10 голосов
/ 08 октября 2010

Вам просто нужно вызвать метод 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);

Не очень элегантно, но работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...