Sto provando a collegarmi a un evento sugli oggetti INotifyPropertyChanged
in una raccolta.Osservare ProprietàChanged su elementi di una raccolta
Ogni risposta che io abbia mai visto a questa domanda ha detto di gestire la cosa nel modo seguente:
void NotifyingItems_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if(e.NewItems != null)
{
foreach(INotifyPropertyChanged item in e.NewItems)
{
item.PropertyChanged += new PropertyChangedEventHandler(CollectionItemChanged);
}
}
if(e.OldItems != null)
{
foreach(ValidationMessageCollection item in e.OldItems)
{
item.PropertyChanged -= CollectionItemChanged;
}
}
}
Il mio problema è che questo non riesce del tutto ogni volta che uno sviluppatore chiama Clear()
sulla raccolta NotifyingItems. Quando ciò accade, questo gestore di eventi viene chiamato con e.Action == Reset
e entrambi e.NewItems
e e.OldItems
uguale a null
(Mi aspetto che quest'ultimo contenga tutti gli elementi).
Il problema è che quegli oggetti non vanno via e non vengono distrutti, non sono più presumibilmente monitorati dalla classe corrente, ma poiché non ho mai avuto la possibilità di rimuovere il loro PropertyChangedEventHandler
- mantengono chiamare il mio gestore CollectionItemChanged
anche dopo che sono stati cancellati dal mio elenco NotifyingItems. In che modo una tale situazione dovrebbe essere gestita con questo modello "ben consolidato"?
possibile duplicato del [Quando Cancellazione di un ObservableCollection, ci sono elementi in e.OldItems] (http://stackoverflow.com/questions/224155/when-clearing-an-observablecollection-there-are-no-items- in-e-olditems) – Rachel