过滤掉集合中的结果,而不从集合中删除它们

时间:2016-11-02 10:55:14

标签: c# wpf datagrid observablecollection

我有一个过滤器,用于过滤掉1.4.0中的项目,以便只在我的数据网格中显示集合中的某些项目。 OC被称为 MyTruckCollection

我可以过滤掉结果的唯一方法是删除我不想要的项目,只添加我想要的项目。 (我无法隐藏集合中的某些项目)

示例:

ObservableCollection

现在我的问题是我不想从列表中删除我不想要的项目,因为当我添加另一个过滤器时,该集合仅包含前一个过滤器添加的项目。因此,对于我添加的每个过滤器,我的集合中的项目列表越来越小。

所以问题是:有没有办法过滤掉我的OC中的某些项目而不删除它们并仍然更新我的datagrid的UI。

我也可以这样做:

var filteredList = MyTruckCollection.Where(x => x.TruckStatus == filterValue).ToList();
MyTruckCollection.Clear();
foreach (var filteredItem in filteredList)
    MyTruckCollection.Add(filteredItem);

但是如果我想对它应用 Sorting 函数并且UI没有得到更新,那么我将失去对我的集合的访问权限。我对MVVM不太了解并且对它不太了解,所以如果有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您可以使用ICollectionView界面进行过滤/排序任务。会是这样的

ICollectionView MyTruckCollectionView= CollectionViewSource.GetDefaultView(MyTruckCollection);
MyTruckCollectionView.Filter = o => ((Truck)o).TruckStatus==filterValue
MyTruckCollectionView.SortDescriptions.Add(new SortDescription("field", ListSortDirection.Ascending));
....

答案 1 :(得分:0)

您可以将MyTruckCollection设置为get-only属性,该属性在通过包含所有值的私有myTruckCollection调用时应用活动过滤器。