ImageAlbums
是ICollectionView
类型,GlobalCollection.MyImageAlubms
是ObservableCollection<T>
类型。
ImageAlbums = CollectionViewSource.GetDefaultView(GlobalCollection.MyImageAlubms);
ImageAlbums.Filter = new Predicate<object>(this.FilterImageAlbumList);
在视图中,我使用ImageAlbums显示过滤后的图像列表。我使用FilterImageAlbumList
方法过滤了列表。问题是我在另一个地方使用了GlobalCollection.MyImageAlubms
。在该视图中,我直接使用GlobalCollection.MyImageAlubms作为源,但在那里列表也显示为已过滤。我也在这里提供过滤方法,下面的代码表示过滤方法
private bool FilterImageAlbumList(object item)
{
AlbumModel albumMoel = (AlbumModel)item;
if(LOGIC_OF_FILTERING)
{
return false;
}
return true;
}
有没有办法只过滤ImageAlbums
而不影响GlobalCollection。仅供参考 - 我不会深刻复制全球收藏。
答案 0 :(得分:3)
您的问题是由以下两个事实引起的:
CollectionViewSource.GetDefaultView
始终为同一个参数返回相同的实例因此,如果您在默认视图上设置过滤器,则无论您绑定到集合的哪个位置,其效果都会显示。
如果你想要ICollectionView
的单独实例,最好的办法就是手动实例化它。对于ObservableCollection<T>
,一个不错的选择是ListCollectionView
。所以这应该可以解决你的问题:
ImageAlbums = new ListCollectionView(GlobalCollection.MyImageAlubms);