好的,我需要从现有ICollectionView
创建ICollectionView
。
我的想法是,我可以在现有视图上设置任何过滤器/分组/排序,然后从“基础”视图创建其他视图,实际上是“分层”或聚合我的过滤器等。
当源集合(ObservableCollection<T>
)更新以及更新数据项时(例如调用Refresh()
方法),我需要结束视图以“自动魔法”更新其项目。我需要避免在所有视图上调用Refresh,因为我们不知道原始集合和结束视图之间的所有视图,并且Refresh()
非常缓慢。
我们试图避免滚动我们自己的视图类 - 我们宁愿(强烈地)使用.net库中已存在的东西。
更新
我们已经打电话给微软。我知道其他人有同样的问题,至少是Dr. WPF tells me。
答案 0 :(得分:1)
好的,所以我们最终滚动了我们自己的集合和视图。
我们的集合基于ObservableCollection,它附加到集合中每个元素的PropertyChanged事件。我们有一个事件,只要属性发生变化就会调用,这样其他类和/或视图就可以挂钩并按照自己的意愿处理它。
然后我们基于ListCollectionView创建了自己的ICollectionView。视图从集合中监视CollectionItemChanged事件并简单地调用(如果集合中的项目是IEditableObject)IEditableList.EditItem(...)和IEditableList.CommitItem(...)
此Edit()然后CommitItem()会导致视图刷新而不实际调用Refresh()
这完全是“haxor”但是,直到MS为我们这些可怜的开发人员做些事情来解决这个问题。