C# HierarchycalDataTemplate中的筛选
假设我有一个节点类C# HierarchycalDataTemplate中的筛选,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,假设我有一个节点类 public class Node { public string Name; public ObservableCollection<Node> SubNodes; } 并享受结果 现在,我想将我自己的过滤函数(比如“MyFilterFun”)应用于树状视图中的所有节点。为此,我将HierarchycalDataTemplate修改为 Tree.ItemsSource = my_Observable_Collection_Of_Nodes;
public class Node
{
public string Name;
public ObservableCollection<Node> SubNodes;
}
并享受结果
现在,我想将我自己的过滤函数(比如“MyFilterFun”)应用于树状视图中的所有节点。为此,我将HierarchycalDataTemplate修改为
Tree.ItemsSource = my_Observable_Collection_Of_Nodes;
<HierarchicalDataTemplate DataType="myNamespace:MyClass">
<HierarchicalDataTemplate.ItemsSource>
<Binding>
<Binding.Source>
<CollectionViewSource Source="{Binding Path=SubNodes}"
Filter="MyFilterFun"/>
</BindingSource>
</Binding>
<HierarchicalDataTemplate.ItemsSource>
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
不幸的是,这不起作用,“MyFilterFun”从未被调用。
那么什么是正确的方法呢?这可以通过使用ICollectionView来完成。根据您的观察收集,您可以执行以下操作:
SubNodesCollectionView = CollectionViewSource.GetDefaultView(SubNodes);
SubNodesCollectionView.Filter = (param) =>
{
return true;
};
然后绑定到子节点CollectionView,而不是子节点。lambda处理程序将是一种方法,您可以指定它来筛选每个对象,而不是仅返回true。在基础源类中具有类型为
CollectionViewSource
或ICollectionView
的属性,并使用该属性绑定。
SubNodesCollectionView = CollectionViewSource.GetDefaultView(SubNodes);
SubNodesCollectionView.Filter = (param) =>
{
return true;
};