WPFObservableCollection过滤异常的BUG
问题复现:
使用两个带有不同过滤规则(Filter)的ICollectionView对ObservableCollection进行过滤时,出现显示不出数据的情况,但是此时ObservableCollection内是有数据的。
代码如下:
// 源数据
public ObservableCollection<ResourceItem> Resource { get; set; } = new ObservableCollection<ResourceItem>();
// 过滤视图A
public ICollectionView YXZYCollection
{
get
{
// 错误点
var source = new CollectionViewSource { Source = Resource }.View;
source.Filter = (item) => ((ResourceItem) item).ResCategory == "YXZY";
return source;
}
}
//过滤视图B
public ICollectionView YXKWCollection
{
get
{
//错误点
var source = CollectionViewSource.GetDefaultView(Resource);
source.Filter = (item) => ((ResourceItem)item).ResCategory == "YXKW";
return source;
}
}
问题原因
如上文中标记出的错误点,使用GetDefaultView
获取的视图是共用了同一个view,也就是相当于两个指针指向了同一个对象本身,使用不同的filter
进行过滤后两个过滤规则冲突,所以过滤的结果为空,应该改成以下语句:
// 正确
var source = new CollectionViewSource { Source = Resource }.View;
// 错误
//var source = CollectionViewSource.GetDefaultView(Resource);
不得不说还是Stack Overflow靠谱。