gpt4 book ai didi

c# - 将任何 XML 文档绑定(bind)到 WPF TreeView

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:19 25 4
gpt4 key购买 nike

我想使用 TypeConverter 将任何 XML 文档绑定(bind)到 WPF TreeView。

我最初的解决方案是使用递归,但是当文档很大时,UI 会被严重束缚。

以下链接讨论 TypeConverter 但针对特定节点/元素组合: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/edd843b7-b378-4c2d-926f-c053dbd7b340

如果不知道 XML 文档是什么样子怎么办?由于这仅用于显示目的,我不太关心此时的功能,我只想将 XML 绑定(bind)到 TreeView。

最佳答案

它适用于其他节点类型,只需进行一些简单的修改。首先,必须将 HierarchicalDataTemplate.ItemsSource Binding XPath 更改为“child::node()|attribute::*”以允许任何子节点和任何属性。然后,为其他 NodeType 添加 DataTriggers。下面的例子对我有用。请注意,我为各种 NodeType 添加了图标,您可能想要删除它们:

        <HierarchicalDataTemplate x:Key="NodeTemplate">
<StackPanel Orientation="Horizontal">
<Image x:Name="icon" VerticalAlignment="Center" Margin="1,1,4,1"/>
<TextBlock x:Name="name" Text="" />
<TextBlock x:Name="inter" Text="" />
<TextBlock x:Name="value" Text="" />
</StackPanel>
<HierarchicalDataTemplate.ItemsSource>
<Binding XPath="child::node()|attribute::*" />
</HierarchicalDataTemplate.ItemsSource>
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=NodeType}" Value="Element">
<Setter TargetName="icon" Property="Source" Value="icons/element.png"></Setter>
<Setter TargetName="name" Property="Text" Value="{Binding Path=Name}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=NodeType}" Value="Text">
<Setter TargetName="icon" Property="Source" Value="icons/text.png"></Setter>
<Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=NodeType}" Value="Attribute">
<Setter TargetName="icon" Property="Source" Value="icons/attribute.png"></Setter>
<Setter TargetName="name" Property="Text" Value="{Binding Path=Name}"></Setter>
<Setter TargetName="inter" Property="Text" Value=": "></Setter>
<Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=NodeType}" Value="CDATA">
<Setter TargetName="icon" Property="Source" Value="icons/cdata.png"></Setter>
<Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=NodeType}" Value="Comment">
<Setter TargetName="icon" Property="Source" Value="icons/comment.png"></Setter>
<Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=NodeType}" Value="ProcessingInstruction">
<Setter TargetName="icon" Property="Source" Value="icons/pi.png"></Setter>
<Setter TargetName="value" Property="Text" Value="{Binding Path=Value}"></Setter>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>

关于c# - 将任何 XML 文档绑定(bind)到 WPF TreeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834632/

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