ICollectionView 的过滤问题

Filtering issue with ICollectionView

ImageAlbumsICollectionView 类型,GlobalCollection.MyImageAlubmsObservableCollection<T> 类型。

ImageAlbums = CollectionViewSource.GetDefaultView(GlobalCollection.MyImageAlubms);
ImageAlbums.Filter = new Predicate<object>(this.FilterImageAlbumList);

在一个视图中,我使用 ImageAlbums 显示过滤后的图像列表。我已经使用 FilterImageAlbumList 方法过滤了列表。问题是我在另一个地方使用了 GlobalCollection.MyImageAlubms 。在该视图中,我直接将 GlobalCollection.MyImageAlubms 用作源,但其中的列表也显示为已过滤。我这里也提供了filter方法,下面代码代表filter方法

private bool FilterImageAlbumList(object item)
{
    AlbumModel albumMoel = (AlbumModel)item;
    if(LOGIC_OF_FILTERING)
    {
        return false;
    }
    return true;
}

有没有办法只过滤ImageAlbums而不影响全局Collection。仅供参考 - 我不会深入复制全局 Collection。

您的问题是由以下两个事实引起的:

  1. 每个集合实例有只有一个默认(实例)视图,因此CollectionViewSource.GetDefaultView总是returns相同参数的相同实例
  2. WPF绑定机制不直接绑定到集合,而是绑定到其默认的集合视图

因此,如果您在默认视图上设置过滤器,无论您绑定到集合,其效果都可见。

如果您想要 ICollectionView 的单独实例,最好的办法是手动实例化它。对于 ObservableCollection<T>,一个不错的选择是 ListCollectionView。所以这应该可以解决您的问题:

ImageAlbums = new ListCollectionView(GlobalCollection.MyImageAlubms);