我正試圖在集合中的對象上掛鉤事件INotifyPropertyChanged
。觀察PropertyChanged集合中的項目
,我見過這個問題每一個答案,說按如下方式處理:
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;
}
}
}
我的問題是當一個開發商呼籲NotifyingItems收集Clear()
,這完全失敗。當發生這種情況時,這個事件處理程序調用e.Action == Reset
和e.NewItems
和e.OldItems
等於null
(我期望後者包含所有項目)。
問題是那些物品不會消失,它們不會被破壞,它們不再被當前課程監控 - 但是因爲我從來沒有機會取消它們的PropertyChangedEventHandler
- 他們保留即使它們已從我的NotifyingItems列表中清除,也會調用我的CollectionItemChanged
處理程序。這種情況應該如何用這種「完善的」模式來處理?
[清除ObservableCollection時,e.OldItems中沒有項目]的可能重複(http://stackoverflow.com/questions/224155/when-clearing-an-observablecollection-there-are-no-items- in-e-olditems) – Rachel 2012-02-22 16:58:32