关于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  阅读(443)  评论(0编辑  收藏  举报

导航