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,不是最优解。
希望解决以下两个问题:
- 如何在XAML中创建CollectionViewSource并传递给TreeView.HierarchicalDataTemplate.ItemsSource?
- 如何基于会定期更新的嵌套列表创建CollectionViewSource?
内容的提问来源于stack exchange,提问作者Poulpynator
相关产品推荐
相关产品推荐

