我有一个ListCollectionView
应用了过滤器的过滤器。为了从列表中获取过滤后的项目(例如写入文件),有没有一种干净的方法。
我目前的解决方案是
var filteredItems = originalCollection.Where(i => view.Filter(i));
在代码中,我会检查 和 上的空originalCollection
值view.Filter
。
有更清洁的方法吗?
我有一个ListCollectionView
应用了过滤器的过滤器。为了从列表中获取过滤后的项目(例如写入文件),有没有一种干净的方法。
我目前的解决方案是
var filteredItems = originalCollection.Where(i => view.Filter(i));
在代码中,我会检查 和 上的空originalCollection
值view.Filter
。
有更清洁的方法吗?
该GetEnumerator
方法将过滤器考虑在内,因此您可以foreach
在视图上方:
ICollectionView view = ...
view.Filter = ...
foreach(Foo o in view)
{
...
}
(假设原始集合中的对象是 type Foo
)。
您还可以使用Cast
扩展方法:
var filteredItems = view.Cast<Foo>();
以下是如何从 DataGrid 中获取过滤项目的完整示例:
ICollectionView view = CollectionViewSource.GetDefaultView(*yourDataGrid*);
foreach(Foo o in view)
{
...
}