UPDATE: Problema risolto, vedi my Answer.Sottoscrivi INotifyPropertyChanged per annidato (bambino) gli oggetti
Sto cercando un ambiente pulito e soluzione elegante per gestire l'evento INotifyPropertyChanged
di (bambino) oggetti nidificati. Esempio di codice:
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
}
Focus sul BestFriend
proprietà e il suo valore setter. Ora So che potrei farlo manualmente, implementando tutti i passaggi descritti nei commenti. Ma questo sarà un sacco di codice, specialmente quando sto pensando di avere molte proprietà figlio che implementano lo INotifyPropertyChanged
in questo modo. Ovviamente non saranno sempre dello stesso tipo, l'unica cosa che hanno in comune è l'interfaccia INotifyPropertyChanged
.
Il motivo è che nel mio scenario reale, ho un oggetto "Articolo" (nel carrello) complesso che ha proprietà di oggetti annidati su più livelli (l'elemento ha un oggetto "Licenza", che può avere esso stesso oggetti figlio di nuovo) e ho bisogno di essere informato su ogni singolo cambiamento dell '"Articolo" per poter ricalcolare il prezzo.
Avete qualche buon consiglio o anche qualche implementazione per aiutarmi a risolvere questo?
Purtroppo, non sono in grado/consentito di utilizzare passaggi post-generazione come PostSharp per raggiungere il mio obiettivo.
Grazie mille in anticipo,
- Thomas
AFAIK, la maggior parte delle implementazioni vincolanti non * si aspetta * che l'evento si propaghi in quel modo. * Non hai * cambiato il valore di 'BestFriend', dopo tutto. –