Pregunta

Tenemos un objeto que se deriva de DependencyObject e implementa algunas propiedades de dependencia.

Básicamente algo como esto:

class Context : DependencyObject {
   public static readonly DependencyProperty NameProperty =
   DependencyProperty.Register ("Name", typeof (string), typeof (Context), new PropertyMetadata (""));
    public string Name {
        get {
            return (string)this.GetValue (NameProperty);
        }
        set {
            this.SetValue (NameProperty, value);
        }
    }
}

Esto funciona, la propiedad está configurada, puede vincularse, etc. El problema se presenta cuando vinculo A la propiedad de WPF, usando un enlace de Dos Vías. La parte de TwoWay nunca sucede realmente, WPF nunca llama al conjunto de esta propiedad. He configurado mi enlace de esta manera:

<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

En este caso, al escribir en el cuadro de texto se debe actualizar inmediatamente la propiedad Nombre, pero no lo hace. Si cambio la propiedad Nombre para que sea una propiedad POCO normal, funciona (aunque el otro lado de TwoWay obviamente no lo hace, a menos que implemente INotifyPropertyChanged).

¿Qué estoy haciendo mal aquí? Esto debería ser algo muy simple de hacer, pero me está causando un sinfín de dolores de cabeza.

¿Fue útil?

Solución

Este es el comportamiento esperado. La propiedad CLR es simplemente una envoltura alrededor de la DependencyProperty subyacente. WPF a menudo se optimiza llamando a GetValue y SetValue directamente. Si necesita una lógica personalizada para ejecutar, use los metadatos de DependencyProperty .

Otros consejos

Después de este problema me costó algo de tiempo:

Para aquellos de ustedes que tienen el mismo problema, pero, como yo, no ven la solución en la respuesta anterior:

Para admitir la herencia de DataContext, la clase personalizada (Contexto en este caso) debe derivarse de FrameworkElement en lugar de DependencyObject . Eso es todo.

Marc

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top