Why ObservableCollection
没有RemoveAll
方法就像List
?
我已经实施了一个扩大方法来提供此功能ObservableCollection
,但我想了解是否有特定原因不提供此功能。
会不会有影响数据绑定在某种程度上由于收藏变更? This http://updatecontrols.net/doc/tips/common_mistakes_observablecollection帖子确实指定了使用时可能出错的一些事情ObservableCollections
,但没有解决这个问题。
它确实有一个Clear()
删除所有可以使用的项目的方法。
如果我不得不冒险猜测他们为什么使用Clear
代替RemoveAll
,我想这是因为RemoveAll
带有您正在从集合中删除项目的建议,同时Clear
告诉您这些物品正在被清除。
这使得类型有所不同CollectionChanged
引发的通知。Clear()
提出一个NotifyCollectionChangedAction.Reset
事件,并且不包括事件中删除的项目,而Remove
提出一个NotifyCollectionChangedAction.Removed
事件,并将删除的项目传递给该事件。
您不能提出CollectionChanged具有多个项目的事件 https://stackoverflow.com/a/7449401/302677,所以提出一个NotifyCollectionChangedAction.Removed
删除所有项目的事件将引发异常。另一种选择是提出一个CollectionChanged
每个被删除的项目都会发生事件,这对性能来说可能非常糟糕。并简单地提出一个NotifyCollectionChangedAction.Reset
当用户期待一个事件时,事件会引起一些混乱Removed
当他们移除物品时发生的事件。
所以我猜他们决定简单地使用.Clear()
代替.RemoveAll()
因为这个名字更好地描述了幕后实际发生的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)