【问题标题】:Get filtered items from a CollectionView从 CollectionView 中获取过滤的项目
【发布时间】:2012-01-21 02:03:15
【问题描述】:

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

我目前的解决方案是

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

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

有没有更清洁的方法?

【问题讨论】:

  • var filteredItems = originalCollection.FindAll(view.Filter); 也有效

标签: c# .net wpf collectionview


【解决方案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)
{
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2018-07-01
    • 2015-06-08
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多