【发布时间】:2017-03-15 15:52:21
【问题描述】:
我有一个过滤器,可以过滤掉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 不太了解,也不太了解,请问有人可以帮助我吗?
【问题讨论】:
-
你可以使用 CollectionView (wpftutorial.net/DataViews.html)
-
为什么你是 MyTruckCollection.Clear();什么时候想重用集合?
-
@mybirthname 否则我添加的项目将被添加多次,我不希望在集合中重复。还是有更好的方法?
-
将 FilteredTruckCollection 属性添加到视图模型并填充它而不是重复使用 MyTruckCollection
-
在项目的可见属性上使用
Converter。
标签: c# wpf datagrid observablecollection