我有一个可观察的集合... SelectableDataContext<T>
..并且在通用类SelectableDataContext<T>
中...具有两个私有(private)成员变量
当IsSelected属性更改时...我收藏的更改后的属性未触发。
我认为应该触发...因为它是
Reset
中的INotifyCollectionChangedAction
。 最佳答案
这是一个古老的问题,但对于任何可能像我一样通过搜索遇到此问题的人来说都是如此:NotifyCollectionChangedAction.Reset
的意思是“集合的内容发生了巨大变化”。当您在基础可观察集合上调用Clear()
时,引发Reset事件的一种情况。
使用Reset事件,您不会在NewItems
参数中获得OldItems
和NotifyCollectionChangedEventArgs
集合。
这意味着您最好使用事件的“发送者”来获取对修改后的集合的引用,并直接使用该引用,即假定它是一个新列表。
例如:
((INotifyCollectionChanged)stringCollection).CollectionChanged += new NotifyCollectionChangedEventHandler(StringCollection_CollectionChanged);
...
void StringCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (string s in e.NewItems)
{
InternalAdd(s);
}
break;
case NotifyCollectionChangedAction.Remove:
foreach (string s in e.OldItems)
{
InternalRemove(s);
}
break;
case NotifyCollectionChangedAction.Reset:
ReadOnlyObservableCollection<string> col = sender as ReadOnlyObservableCollection<string>;
InternalClearAll();
if (col != null)
{
foreach (string s in col)
{
InternalAdd(s);
}
}
break;
}
}
有关此Reset事件的大量讨论在这里:When Clearing an ObservableCollection, There are No Items in e.OldItems。
关于wpf - 什么是notifycollectionchangedaction重置值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4495904/