2010-05-20 4 views
6

Estoy estudiando encuadernación en WPF, entonces tengo esta pregunta:¿Cómo evita el enlace de datos la actualización recursiva en WPF?

Digamos que una propiedad de dependencia está vinculada a una propiedad de un objeto que implementa la interfaz INotifyPropertyChanged.

cuando la actualización destino de enlace de la fuente, entonces la propiedad de la fuente se actualiza.

ya que el colocador propiedad del objeto de origen ha cambiado, que a su vez notificará al-oyente objetivo vinculante, lo que resultará en la actualización recursiva.

¿Cómo se evita en WPF?

Respuesta

0

Las actualizaciones de la fuente causada por un evento de la propiedad que cambió no activan la unión, y los acontecimientos de propiedad que cambió el que se producen mientras que una unión es la actualización de la fuente son ignorados.

Aquí es una manera fácil de demostrar esto. Crear esta clase:

public class TestClass : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private int _Property; 

    public int Property 
    { 
     get { return _Property; } 
     set 
     { 
      if (value < 1000) // just to be on the safe side 
      { 
       _Property = value + 1; 
       if (PropertyChanged != null) 
       { 
        PropertyChanged(this, new PropertyChangedEventArgs("Property")); 
       } 
      } 
     } 
    } 
} 

Ahora crear una ventana que contiene dos TextBox es cuyos Text está ligado a la propiedad Property en una instancia de esta clase. Utilice ambos enlaces bidireccionales, con UpdateSourceTrigger establecido en PropertyChanged.

Cada vez que escriba un número en el límite TextBox, el otro TextBox mostrará el siguiente número. El enlace en el primer TextBox está ignorando el evento PropertyChanged que la fuente está provocando porque ese evento está sucediendo durante el enlace. El segundo cuadro de texto hace que se actualice por el primer evento PropertyChanged, pero no actualiza la fuente con su nuevo valor.

Si actualiza la propiedad en el código, (por ejemplo, en un evento de clic de botón), ambos TextBox es mostrarán el mismo valor, p. si establece la propiedad en 20, ambas mostrarán 21. El evento de propiedad modificada se activará cuando la propiedad se establezca en 20, se muestre el valor actual de 21 y los enlaces no actualicen la fuente.

+0

Sé que el evento de la propiedad-cambiado debió ser ignorado, quiero saber WPF hace. – Benny

+0

Mira el código con Reflector. –

+0

Esto no dice nada sobre cómo evitar el problema –

Cuestiones relacionadas