C # ObservableCollection OnCollectionChanged non sparato quando l’object cambia

Da MSDN su OnCollectionChanged: “Si verifica quando un elemento viene aggiunto, rimosso, modificato, spostato o l’intero elenco viene aggiornato.”

Sto cambiando una proprietà associata ad un object che risiede nella mia collezione, ma OnCollectionChanged non viene licenziato. Sto implementando iNotifyPropertyChanged nella class obj.

public class ObservableBatchCollection : ObservableCollection { protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { if(e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) { foreach (BatchData item in e.NewItems) { } } base.OnCollectionChanged(e); } public ObservableBatchCollection(IEnumerable items) : base(items) { } } 

Per me, questo dice che quando un object nella collezione viene modificato, come una proprietà dell’object, questo evento dovrebbe sparare. Non è, comunque. Voglio essere in grado di sapere quando un object nella mia collezione personalizzata cambia in modo da poter eseguire un calcolo su di esso, se necessario.

qualche idea?

ObservableCollection solleva gli eventi solo quando cambia la raccolta stessa . Un object contenuto nella collezione che ha il suo stato interno mutato non ha alterato la struttura della collezione e ObservableCollection non lo segnalerà.

Un’opzione è sottoclass ObservableCollection e iscriviti all’evento OnPropertyChanged di ogni object quando viene aggiunto. In quel gestore, puoi generare un evento personalizzato o tornare all’evento PropertyChanged della raccolta. Nota che se T : INotifyPropertyChanged questo percorso, dovresti aggiungere un vincolo generico in modo che T : INotifyPropertyChanged .