2010-10-07 9 views

Respuesta

9

sólo tiene que llamar al método de la unión ProvideValue. La parte difícil es que debe pasar un IServiceProvider válido al método ... EDITAR: en realidad, eso no es cierto ... ProvideValue devuelve un BindingExpression, no el valor de la propiedad encuadernada.

Se puede utilizar el siguiente truco:

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

muy elegante, pero funciona ...

+0

Ah sí, eso fue todo. Gracias. – Inferis

+0

que estoy tratando de hacer algo similar, pero se produzcan problemas, porque creo que necesito utilizar RelativeSource. ¿Alguna idea de cómo evitar el origen de parientes evaluado con respecto a DummyDO en lugar del objetivo implícito en el contexto del enlace? – tobriand

+0

@tobriand, no estoy seguro de entender ... ¿Cuál es su caso de uso? –

Cuestiones relacionadas