dav*_*v_i 5 c# linq inotifycollectionchanged
我试图从CollectionChanged实现的集合事件中获取一些自定义对象INotifyCollectionChanged.
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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我面临的问题是myItems总是说"枚举没有结果".
扩展调试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
Run Code Online (Sandbox Code Playgroud)
很明显,数据就在那里.检索此数据的方法是什么?
小智 8
这看起来像是创建NotifyCollectionChangedEventArgs对象的任何错误.
NotifyCollectionChangedEventArgs有几个构造函数.这里有两个相关的:
NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction, object)NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction, IList)第一个描述了对单个项目的更改.第二个描述了项目列表的更改.
但是,NotifyCollectionChangedEventArgs构造函数被称为new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, enumerable).IEnumerable<...>没有实现IList,所以当第二个是应该使用的构造函数时,第一个构造函数被调用.
您是否可以控制引发的代码NotifyCollectionChanged?如果是这样,请new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, enumerable.ToList())改用.
| 归档时间: |
|
| 查看次数: |
1006 次 |
| 最近记录: |