gpt4 book ai didi

wpf - 什么是notifycollectionchangedaction重置值

转载 作者:行者123 更新时间:2023-12-02 03:56:45 24 4
gpt4 key购买 nike

我有一个可观察的集合... SelectableDataContext<T> ..在通用类 SelectableDataContext<T> 中是...有两个私有(private)成员变量

  1. 私有(private) T 项目。
  2. 选择了私有(private) bool 值。

当 IsSelected 属性更改时...我的集合的已更改属性不会触发。

我认为它应该火...因为它是 ResetINotifyCollectionChangedAction .

最佳答案

这是一个老问题,但为了任何可能像我一样通过搜索遇到这个问题的人的利益:

NotifyCollectionChangedAction.Reset 表示“集合的内容发生了巨大变化”。引发 Reset 事件的一种情况是当您对底层可观察集合调用 Clear() 时。

使用 Reset 事件,您不会在 NotifyCollectionChangedEventArgs 参数中获取 NewItemsOldItems 集合。

这意味着您最好使用事件的“发送者”来获取对修改后的集合的引用并直接使用它,即假设它是一个新列表。

一个例子可能是这样的:

((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;
}
}

这里有很多关于此重置事件的讨论:When Clearing an ObservableCollection, There are No Items in e.OldItems .

关于wpf - 什么是notifycollectionchangedaction重置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4495904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com