关于WPF中的CollectionView

本文探讨了WPF中CollectionView的使用及其派生类ListCollectionView,特别关注ObservableCollection<T>的处理。文章介绍了CollectionViewSource的作用及如何通过重写ProcessCollectionChanged方法或调用Refresh()方法来实现元素的动态过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天才知道原来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 ();
}

当然这样做是可能会有性能下降的,不过需求本来如此。

转载于:https://www.cnblogs.com/Gildor/archive/2010/02/28/WPF.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值