ICollectionView将过滤器添加到ObservableCollection

时间:2019-02-18 15:22:31

标签: c# wpf xaml

我在WPF应用程序中遇到了问题,当我向ICollectionView添加过滤器时,搜索过滤器将应用于observablecollection。 我有两个不同的视图模型的两个视图。在这种情况下,一个视图使您可以搜索集合并进行操作,而第二个视图具有一个组合框,允许用户从集合中选择一个项目。

首先,我正在将这些项目检索到我的observablecollection中,如您在下面的代码中所见。然后,我设置CollectionViewSource。像现在一样,我将过滤器添加到CollectionView中,这是我已经实现的搜索。我的问题是我认为该过滤器仅适用于在列表框中使用的ICollectionView集合,但是它表明它也适用于ObservableCollection。列表框使用CollectionView,而组合框使用类别的ObservableCollection。但是我不希望将过滤器应用于使用observablecolelction的combobox集合,因为我想一直显示所有可用的项。

我该如何解决?

    public ViewModel () 
    {
         CollectionViewSource.GetDefaultView(Categories); 
    }


    public ObservableCollection<Category> Categories
    {
        get
        {
            return this._categories;
        }
        set
        {
            if (this._categories!= value)
            {
                this._categories= value;
                this.OnPropertyChanged("Categories");
            }
        }
    }


    private ICollectionView _categoriesCollection;  
    public ICollectionView CategoriesCollection
    {
        get
        {
            return this._categoriesCollection;
        }
        set
        {
            if (this._categoriesCollection!= value)
            {
                this._categoriesCollection= value;

                this.OnPropertyChanged("CategoriesCollection");
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您绑定到同一视图:Should I bind to ICollectionView or ObservableCollection

除了将CategoriesCollection属性设置为返回值CollectionViewSource.GetDefaultView(_categories)之外,您还可以创建一个新视图来“修复”此问题:

CategoriesCollection = new ListCollectionView(_categories);