【问题标题】:Filter an ObservableCollection<T> with multiple criteria使用多个条件过滤 ObservableCollection<T>
【发布时间】:2011-07-04 07:47:22
【问题描述】:

当我在 DataGrid 的列上的 filter_textboxes 中输入数据时,如何过滤绑定到 WPF DataGrid 的 ObservableCollection?

有没有不使用 codeproject 库的简单解决方案...?

【问题讨论】:

标签: wpf datagrid filter observablecollection


【解决方案1】:

前段时间我问了一个类似的问题,您可能会觉得这很有用:Filter WPF TreeView using MVVM

对于 DataGrid,它应该是一种非常相似的方法。基本上,您想使用 ObservableCollection 创建一个 CollectionViewSource 并将 DataGrid 绑定到它,而不是直接绑定到 ObservableCollection,然后只需在用户键入时设置 CollectionViewSourceFilter

【讨论】:

  • 问题不是过滤一列而是过滤几列。
  • 因为当我过滤了一个值并对谓词返回 true 时,我在另一列中输入了另一个值。但是这个新值不会应用于原始集合,而是应用于过滤的集合......因此我无法过滤多个值......
  • Ganesh Mohanrao 的评论:“您能否分享一下您是如何使用 Observable Collection 实现树过滤的?代码示例将非常有用。我正在尝试过滤我的树,即使根节点不符合条件并且子节点满足,我无法过滤子节点的父节点。由于子节点满足条件,它应该与整个树路径一起显示。”
【解决方案2】:

我有一个非常相似的问题,并且有一个相当简单的解决方案。简而言之:

要将多个过滤器应用于绑定到 WPF DataGrid 的集合,您应该实例化一个 CollectionViewSource 对象作为视图和集合之间的代理(这也适用于其他集合控件)。这样做将允许您将多个过滤器事件处理程序订阅到它的过滤器事件。过滤器按照订阅的顺序应用,并且可以通过取消订阅来移除。

如果您在代码隐藏或 ViewModel 中使用 CollectionViewSource.GetDefaultView() 静态方法,这将返回 ICollectionView 的实例,该实例仅支持具有 Filter 属性的单个过滤器。

你可以在这里找到一个带有源代码的例子http://www.codeproject.com/Articles/442498/Multi-filtered-WPF-DataGrid-with-MVVM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2015-07-12
    相关资源
    最近更新 更多