从 CollectionView 中获取过滤的项目
Posted
技术标签:
【中文标题】从 CollectionView 中获取过滤的项目【英文标题】:Get filtered items from a CollectionView 【发布时间】:2012-01-21 02:03:15 【问题描述】:我有一个ListCollectionView
,它应用了一个过滤器。为了从列表中获取过滤后的项目(例如写入文件),有没有一种干净的方法。
我目前的解决方案是
var filteredItems = originalCollection.Where(i => view.Filter(i));
在代码中,我会检查 originalCollection
和 view.Filter
上的空值。
有没有更清洁的方法?
【问题讨论】:
var filteredItems = originalCollection.FindAll(view.Filter);
也有效
【参考方案1】:
GetEnumerator
方法将过滤器考虑在内,因此您只需 foreach
覆盖视图即可:
ICollectionView view = ...
view.Filter = ...
foreach(Foo o in view)
...
(假设原始集合中的对象是Foo
类型)。
也可以使用Cast
扩展方法:
var filteredItems = view.Cast<Foo>();
【讨论】:
ICollectionView view = ... 请展示一个完整的例子。我已经过滤了 DataGrid 中的项目和从 GetDefualtView 获得的视图 我如何获得“CurrentView”?【参考方案2】:这里是如何从 DataGrid 中获取过滤项目的完整示例:
ICollectionView view = CollectionViewSource.GetDefaultView(*yourDataGrid*);
foreach(Foo o in view)
...
【讨论】:
以上是关于从 CollectionView 中获取过滤的项目的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms 如何将数据从 CollectionView 传输到不同的视图?
如何在collectionView numberOfItemsInSection中获取循环项目数
从 collectionView 单元格中获取和更新 UITableView 单元格单击
获取 TableviewCells 以显示从 firebase 提取的不同数据并在 CollectionView 中显示它们