Я пытаюсь подключиться к событию на объектах INotifyPropertyChanged
в коллекции.
Каждый ответ, который я когда-либо видел в этом вопросе, сказал, чтобы обработать его следующим образом:
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;
}
}
}
Моя проблема в том, что это полностью не срабатывает, когда разработчик вызывает Clear()
в коллекции NotifyingItems. Когда это произойдет, этот обработчик событий вызывается с помощью e.Action == Reset
, и оба e.NewItems
и e.OldItems
равны null
(я ожидаю, что последний будет содержать все элементы).
Проблема заключается в том, что эти элементы не исчезают, и они не уничтожаются, они больше не должны контролироваться текущим классом, но поскольку у меня никогда не было возможности отменить их PropertyChangedEventHandler
- они продолжайте называть мой обработчик CollectionItemChanged
даже после того, как они были очищены из моего списка NotifyingItems. Как такая ситуация должна обрабатываться с помощью этой "хорошо установленной" модели?