You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF嵌套集合添加过滤器:树视图与列表视图差异化过滤实现

WPF文件资源管理器嵌套节点过滤问题

我正在开发一款WPF文件资源管理器,用来展示指定路径下的文件和文件夹,节点树基于以下类构建:

class Node {
    public string Path {get;set;}
}
public class FolderNode {
    public ObservableCollection<NodeExplorateur> Childrens { get; set; }
    public ICollectionView ChildrensSorted { get; }
}

同时使用FileSystemWatcher监听文件系统事件来更新节点树,这个节点树在TreeView和ListView组件之间共享,组件交互的XAML代码如下:

<ExplorerTreeView x:Name="ExplorerLeft" RootNode="{Binding Controlleur.NodeRacine, RelativeSource={RelativeSource AncestorType=UserControl}}" />
<ExplorerList RootNode="{Binding SelectedNode, ElementName=ExplorerLeft, Mode=TwoWay}" />

现在需要给两个组件设置不同的过滤规则:TreeView需要隐藏文件,只显示文件夹;ListView要支持文件搜索过滤。用ICollectionView处理ListView的过滤比较简单,但TreeView因为节点嵌套,实现起来有难度。

我试过两种方案但都不理想:

  • 直接在HierarchicalDataTemplate中创建CollectionViewSource,但没有成功:
<HierarchicalDataTemplate.ItemsSource>
    <CollectionViewSource Source="{Binding ChildrenSorted}" Filter="CollectionViewSource_Filter"/>
</HierarchicalDataTemplate.ItemsSource>
  • 在FolderNode中新增专门给TreeView用的ICollectionView,但这种方案会随着组件数量增加而需要添加更多的CollectionView,不是最优解。

希望解决以下两个问题:

  1. 如何在XAML中创建CollectionViewSource并传递给TreeView.HierarchicalDataTemplate.ItemsSource?
  2. 如何基于会定期更新的嵌套列表创建CollectionViewSource?

内容的提问来源于stack exchange,提问作者Poulpynator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:52:14