我在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");
}
}
}
答案 0 :(得分:1)
您绑定到同一视图:Should I bind to ICollectionView or ObservableCollection
除了将CategoriesCollection
属性设置为返回值CollectionViewSource.GetDefaultView(_categories)
之外,您还可以创建一个新视图来“修复”此问题:
CategoriesCollection = new ListCollectionView(_categories);