我想使用 TypeConverter 将任何 XML 文档绑定到 WPF TreeView。
我最初的解决方案是使用递归,但是当文档很大时,UI 就会严重依赖。
以下链接讨论了 TypeConverter,但针对特定的节点/元素组合:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/edd843b7-b378-4c2d-926f-c053dbd7b340
如果不知道 XML 文档是什么样子怎么办?由于这仅用于显示目的,所以此时我不太关心功能,我只想将 XML 绑定到 TreeView。
只需进行一些简单的修改,它就适用于其他节点类型。首先,HierarchicalDataTemplate.ItemsSource Binding XPath 必须更改为“child::node()|attribute::*”以允许任何子节点和任何属性。然后,为其他 NodeType 添加 DataTrigger。下面的例子对我有用。请注意,我添加了各种 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)