2010-10-07 2 views

ответ

9

Вам просто нужно позвонить методу привязки ProvideValue. Жесткая часть состоит в том, что вам необходимо передать действительный IServiceProvider методу ... EDIT: на самом деле это не так ... 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

+0

Я пытаюсь сделать что-то подобное, но сталкиваясь с проблемами, я думаю, потому что мне нужно использовать RelativeSource. Любая идея, как избежать получения родственниками источника в отношении DummyDO вместо цели, подразумеваемой в контексте привязки? – tobriand

+0

@tobriand, я не уверен, что понимаю ... Каков ваш прецедент? –

Смежные вопросы