gpt4 book ai didi

c# - INotifyCollectionChanged 的​​ NewItems - 不能使用 OfType 获取数据

转载 作者:太空狗 更新时间:2023-10-29 22:33:20 26 4
gpt4 key购买 nike

我正在尝试从实现 INotifyCollectionChanged 的集合的 CollectionChanged 事件中获取一些自定义对象。

MyControl_MyCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if(e.Action == NotifyCollectionChangedAction.Add)
{
lock(e.NewItems.SyncRoot)
{
var myItems = e.NewItems.OfType<MyType>();

if(myItems.Any())
{
//do stuff
}
}
}
}

我面临的问题是 myItems 总是说“Enumeration yielded no results”。

展开调试 e.NewItems.SyncRoot 显示以下内容:

e.NewItems.SyncRoot | {object[1]}
|-[0] | {System.Linq.Enumerable.WhereSelectListIterator<MyType, IMyInterface>}
| |-base ...
| |-Non-public members
| |-Results View | Expanding the Results View...
| |-[0] | MyType

很明显,数据就在那里。检索这些数据的方法是什么?

最佳答案

这看起来像是创建 NotifyCollectionChangedEventArgs 的任何错误对象。

NotifyCollectionChangedEventArgs 有几个构造函数。这里有两个相关的:

  • NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction, object)
  • NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction, IList)

第一个描述了对单个项目的更改。第二个描述了对项目列表的更改。

然而,NotifyCollectionChangedEventArgs构造函数被称为 new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, enumerable) . IEnumerable<...>不执行IList , 所以当第二个是应该使用的构造函数时,第一个构造函数被调用。

您是否可以控制引发 NotifyCollectionChanged 的代码? ?如果是这样,请使用 new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, enumerable.ToList())相反。

关于c# - INotifyCollectionChanged 的​​ NewItems - 不能使用 OfType<T> 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12780741/

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