gpt4 book ai didi

c# - ICollectionView 的过滤问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:02 28 4
gpt4 key购买 nike

ImageAlbums是一个 ICollectionView类型和 GlobalCollection.MyImageAlubms是一个 ObservableCollection<T>类型。

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

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

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

有没有办法只过滤ImageAlbums不影响 GlobalCollection。仅供引用 - 我不会深入复制全局收藏。

最佳答案

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

  1. 每个集合实例都有只有一个 默认(的实例) View ,因此CollectionViewSource.GetDefaultView总是为相同的参数返回相同的实例
  2. WPF 绑定(bind)机制不直接绑定(bind)到集合,而是绑定(bind)到它的默认 Collection View

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

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

ImageAlbums = new ListCollectionView(GlobalCollection.MyImageAlubms);

关于c# - ICollectionView 的过滤问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40863270/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com