在WPF中创建视图视图

时间:2010-02-26 00:32:47

标签: wpf dataview icollectionview

好的,我需要从现有ICollectionView创建ICollectionView。 我的想法是,我可以在现有视图上设置任何过滤器/分组/排序,然后从“基础”视图创建其他视图,实际上是“分层”或聚合我的过滤器等。

当源集合(ObservableCollection<T>)更新以及更新数据项时(例如调用Refresh()方法),我需要结束视图以“自动魔法”更新其项目。我需要避免在所有视图上调用Refresh,因为我们不知道原始集合和结束视图之间的所有视图,并且Refresh()非常缓慢。

我们试图避免滚动我们自己的视图类 - 我们宁愿(强烈地)使用.net库中已存在的东西。

更新

我们已经打电话给微软。我知道其他人有同样的问题,至少是Dr. WPF tells me

1 个答案:

答案 0 :(得分:1)

好的,所以我们最终滚动了我们自己的集合和视图。

我们的集合基于ObservableCollection,它附加到集合中每个元素的PropertyChanged事件。我们有一个事件,只要属性发生变化就会调用,这样其他类和/或视图就可以挂钩并按照自己的意愿处理它。

然后我们基于ListCollectionView创建了自己的ICollectionView。视图从集合中监视CollectionItemChanged事件并简单地调用(如果集合中的项目是IEditableObject)IEditableList.EditItem(...)和IEditableList.CommitItem(...)

此Edit()然后CommitItem()会导致视图刷新而不实际调用Refresh()

这完全是“haxor”但是,直到MS为我们这些可怜的开发人员做些事情来解决这个问题。