29

我有一个ListCollectionView应用了过滤器的过滤器。为了从列表中获取过滤后的项目(例如写入文件),有没有一种干净的方法。

我目前的解决方案是

var filteredItems = originalCollection.Where(i => view.Filter(i));

在代码中,我会检查 和 上的空originalCollectionview.Filter

有更清洁的方法吗?

4

2 回答 2

49

GetEnumerator方法将过滤器考虑在内,因此您可以foreach在视图上方:

ICollectionView view = ...
view.Filter = ...

foreach(Foo o in view)
{
    ...
}

(假设原始集合中的对象是 type Foo)。

您还可以使用Cast扩展方法:

var filteredItems = view.Cast<Foo>();
于 2011-12-15T11:20:18.680 回答
0

以下是如何从 DataGrid 中获取过滤项目的完整示例:

ICollectionView view = CollectionViewSource.GetDefaultView(*yourDataGrid*);
foreach(Foo o in view)
{
  ...
}
于 2021-02-06T18:24:40.140 回答