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.
Sé que el evento de la propiedad-cambiado debió ser ignorado, quiero saber WPF hace. – Benny
Mira el código con Reflector. –
Esto no dice nada sobre cómo evitar el problema –