首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICollectionView的过滤问题

ICollectionView的过滤问题
EN

Stack Overflow用户
提问于 2016-11-29 10:17:59
回答 1查看 805关注 0票数 1

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

代码语言:javascript
复制
ImageAlbums = CollectionViewSource.GetDefaultView(GlobalCollection.MyImageAlubms);
ImageAlbums.Filter = new Predicate<object>(this.FilterImageAlbumList);

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

代码语言:javascript
复制
private bool FilterImageAlbumList(object item)
{
    AlbumModel albumMoel = (AlbumModel)item;
    if(LOGIC_OF_FILTERING)
    {
        return false;
    }
    return true;
}

是否有任何方法只过滤ImageAlbums而不影响GlobalCollection。我不会复制全球收藏的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-29 10:48:13

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

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

因此,如果在默认视图上设置了筛选器,则无论绑定到集合的位置,其效果都是可见的。

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

代码语言:javascript
复制
ImageAlbums = new ListCollectionView(GlobalCollection.MyImageAlubms);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40863270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档