关于WPF中的CollectionView
今天才知道原来WPF中有CollectionView这种东西。仔细一想,这类东西的存在也是很自然的,正如Binding中的Converter一样。
CollectionView有几个派生类,分别用于不同的特定collection,对于ObservableCollection<T>,是ListCollectionView. 此外,CollectionViewSource是CollectionView的XAML表示。
各种说明没有比MSDN更全面的了,我没有必要再说一遍。在使用中发现,默认实现的Filter是在每个元素添加时进行,也就是说元素一旦加入就不会再被移除,而我碰巧遇到了需要删除的情形。也就是说,我需要在元素添加时,重新检查所有元素生成一个新的View。这可以通过手动调用Refresh()方法来实现,不过这需要多手动关注源集合的CollectionChanged事件。还可以继承CollectionView并重写ProcessCollectionChanged方法来达到目的。
protected override void ProcessCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs args) { //base.ProcessCollectionChanged (args); this.Refresh (); }
当然这样做是可能会有性能下降的,不过需求本来如此。
posted on 2010-02-28 02:09 Gildor Wang 阅读(446) 评论(0) 编辑 收藏 举报