esta pregunta va a mostrar mi falta de entendimiento del comportamiento esperado en la aplicación/uso de INotifyPropertyChanged:Cuando las propiedades de anidamiento que implementan INotifyPropertyChanged deben cambiar la propoción del objeto principal?
La pregunta es - por la unión a trabajar como se esperaba, cuando se tiene una clase que a su vez implementa INotifyPropertyChanged, que ha anidado propiedades del tipo INotifyPropertyChanged ¿se espera que se suscriba internamente para cambiar la notificación de estas propiedades y luego propocionar las notificaciones? ¿O se espera que la infraestructura vinculante tenga la inteligencia necesaria para hacer esto innecesario?
Por ejemplo (nota de este código no es completa - sólo la intención de ilustrar la cuestión):
public class Address : INotifyPropertyChanged
{
string m_street
string m_city;
public string Street
{
get { return m_street; }
set
{
m_street = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Street"));
}
}
public string City
{
get { return m_city; }
set
{
m_city = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("City"));
}
}
public class Person : INotifyPropertyChanged
{
Address m_address;
public Address
{
get { return m_address = value; }
set
{
m_address = value;
NotifyPropertyChanged(new PropertyChangedEventArgs("Address"));
}
}
}
Por lo tanto, en este ejemplo tenemos un objeto Dirección anidada en un objeto Person. Ambos implementan INotifyPropertyChanged para que la alteración de sus propiedades resulte en la transmisión de notificaciones de cambio de propiedad a los suscriptores.
Pero digamos que al usar el enlace, alguien se suscribe para cambiar la notificación en un objeto Persona, y está 'escuchando' los cambios en la propiedad Dirección. Recibirán notificaciones si la propiedad Dirección cambia por sí misma (se asigna un objeto Dirección diferente) pero NO recibirán notificaciones si los datos contenidos por el objeto de dirección anidada (la ciudad o la calle) se modifican.
Esto lleva a la pregunta: ¿se espera que la infraestructura de enlace maneje esto, o debería en mi implementación de Person suscribirme a notificaciones de cambio en el objeto de dirección y luego propagarlas como cambios a "Dirección"?
Si llega a este punto, gracias por solo tomarse el tiempo de leer esta larga pregunta?
Comentario muy apreciado!
Phil
Encontré esta pregunta después de buscar en Google. Para mí, parece que tienes que suscribirte manualmente al evento PropertyChanged para niños y hacerlo funcionar en enlaces WPF. – loraderon
loraderon, estoy bastante seguro de que ese no es el caso, al menos en mis pruebas, ese ha sido el caso. Y, no hay información (que he encontrado) para decir lo contrario. ¿Tiene algún enlace a cualquier información que pueda proporcionar sobre esto? Gracias. Phil – Phil
No tengo ningún enlace tampoco. En mi proyecto actual tuve que hacer burbujas en el evento PropertyChanged para que funcione. Soy un novato en WPF y MVVM, así que podría ser algo especial con mi proyecto. – loraderon