ACTUALIZACIÓN: Problema resuelto, consulte my Answer.Suscribirse a INotifyPropertyChanged para anidados (secundarios) los objetos
Estoy buscando un lugar limpio y solución elegante para controlar el evento INotifyPropertyChanged
de objetos (niño) anidados. Código de ejemplo:
public class Person : INotifyPropertyChanged {
private string _firstName;
private int _age;
private Person _bestFriend;
public string FirstName {
get { return _firstName; }
set {
// Short implementation for simplicity reasons
_firstName = value;
RaisePropertyChanged("FirstName");
}
}
public int Age {
get { return _age; }
set {
// Short implementation for simplicity reasons
_age = value;
RaisePropertyChanged("Age");
}
}
public Person BestFriend {
get { return _bestFriend; }
set {
// - Unsubscribe from _bestFriend's INotifyPropertyChanged Event
// if not null
_bestFriend = value;
RaisePropertyChanged("BestFriend");
// - Subscribe to _bestFriend's INotifyPropertyChanged Event if not null
// - When _bestFriend's INotifyPropertyChanged Event is fired, i'd like
// to have the RaisePropertyChanged("BestFriend") method invoked
// - Also, I guess some kind of *weak* event handler is required
// if a Person instance i beeing destroyed
}
}
// **INotifyPropertyChanged implementation**
// Implementation of RaisePropertyChanged method
}
Enfoque a la BestFriend
propiedad y su valor colocador. Ahora Sé que podría hacerlo manualmente, implementando todos los pasos descritos en los comentarios. Pero esto va a ser un montón de código, especialmente cuando estoy planeando tener muchas propiedades secundarias implementando INotifyPropertyChanged
de esta manera. Por supuesto, no van a ser siempre del mismo tipo, lo único que tienen en común es la interfaz INotifyPropertyChanged
.
La razón es que, en mi situación real, tengo un objeto "Artículo" complejo (en carrito) que tiene propiedades de objeto anidadas en varias capas (El artículo tiene un objeto "Licencia", que puede tener objetos secundarios de nuevo) y necesito que me notifiquen sobre cualquier cambio individual del "Artículo" para poder volver a calcular el precio.
¿Tiene algunos buenos consejos o incluso algunos implementación para ayudarme a resolver esto?
Desafortunadamente, no puedo/puedo usar pasos posteriores a la compilación como PostSharp para lograr mi objetivo.
Muchas gracias por adelantado,
- Thomas
AFAIK, la mayoría de las implementaciones de enlace no * esperan * que el evento se propague de esa manera. * No * has * cambiado el valor de 'BestFriend', después de todo. –