过滤掉集合中的结果,而不从集合中删除它们
本文关键字:集合 删除 结果 过滤 | 更新日期: 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(包含所有的值)时应用活动过滤器