Próbuję podłączyć się do zdarzenia na obiektach INotifyPropertyChanged
w kolekcji.Obserwuj obiekt PropertyChanged na elementach w kolekcji
Każda odpowiedź, jaką kiedykolwiek widziałem do tej kwestii powiedział obsługiwać go w następujący sposób:
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;
}
}
}
Moim problemem jest to, że zupełnie nie ilekroć wymaga deweloper Clear()
na gromadzenie NotifyingItems. Kiedy tak się dzieje, ten program obsługi zdarzeń jest wywoływany z e.Action == Reset
i oba e.NewItems
i są równe null
(spodziewałbym się, że te ostatnie będą zawierały wszystkie elementy).
Problem polega na tym, że przedmioty nie znikają, i nie są niszczone, po prostu nie powinny być monitorowane przez obecną klasę - ale ponieważ nigdy nie miałem okazji odkodowania ich PropertyChangedEventHandler
- wywoływanie mojej obsługi CollectionItemChanged
nawet po usunięciu ich z listy NotifyingItems. W jaki sposób należy zająć się taką sytuacją za pomocą tego "dobrze ugruntowanego" wzoru?
możliwy duplikat [Wyczyszczanie ObservableCollection, Nie ma żadnych elementów w e.OldItems] (http://stackoverflow.com/questions/224155/when-clearing-an-observablecollection-there-are-no-items- in-e-olditems) – Rachel