gpt4 book ai didi

c# - 在 HierarchicalDataTemplate 中过滤

转载 作者:行者123 更新时间:2023-12-03 10:36:31 25 4
gpt4 key购买 nike

假设我有一个 Node 类

public class Node
{
public string Name;
public ObservableCollection<Node> SubNodes;
}

并创建了以下 xaml 以可视化 Node 对象的集合:
<TreeView Name="Tree">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="myNamespace:Node"
ItemsSource="{Binding Path=SubNodes}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>

在代码隐藏中我写了类似的东西
Tree.ItemsSource = my_Observable_Collection_Of_Nodes;

并享受结果。

现在我想将我自己的过滤功能(比如“MyFilterFun”)应用到 TreeView 中的所有节点。为此,我将 HierarchicalDataTemplate 修改为类似
<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 来完成。从您的 ObservableCollection 中,您可以执行以下操作:

SubNodesCollectionView = CollectionViewSource.GetDefaultView(SubNodes);
SubNodesCollectionView.Filter = (param) =>
{
return true;
};

然后绑定(bind)到 SubNodesCollectionView 而不是 SubNodes。 lambda 处理程序将是一种方法,您可以指定过滤每个方法,而不仅仅是返回 true。

关于c# - 在 HierarchicalDataTemplate 中过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25686718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com