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

本文关键字:集合 删除 结果 过滤 | 更新日期: 2023-09-27 18:15:51

我有一个过滤器,它过滤掉ObservableCollection中的项,以便在我的数据网格中只显示集合中的某些项。OC名为MyTruckCollection

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

例子:

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

现在我的问题是,我不想从列表中删除我不想要的项目,因为当我添加另一个过滤器时,集合只包含由前一个过滤器添加的项目。因此,随着我添加的每一个过滤器,我的集合中的项目列表会变得越来越小。

所以问题是:有没有一种方法来过滤掉某些项目在我的OC不删除它们,仍然更新我的数据网格的UI。

我也可以这样做:

dgMyTruckCollection.ItemSource = MyTruckCollection.Where(x => x.TruckStatus == filterValue);

但是,如果我想应用排序函数,我就会失去对集合的访问权限,并且UI不会更新。我不太擅长MVVM,也不太了解它,所以如果有人可以帮助我,请?

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

可以使用ICollectionView接口进行过滤/排序任务。应该是这样的

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

你可以让MyTruckCollection成为一个get-only属性,当调用一个私有的MyTruckCollection(包含所有的值)时应用活动过滤器