将任何XML文档绑定到WPF TreeView

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

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

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

如果不知道XML文档是什么样的,该怎么办? 由于这仅用于显示目的,因此我不太关心function,我只想将XML绑定到TreeView。

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

                                       

所以我问了一个关于如何将任何XML文档绑定到树视图的问题,如下所示:1。通过XML Provider和HierarchicalDataTemplate将XML文档绑定到WPF TreeView。 2.显示XML文档的所有节点,包括具有以下格式的子节点的节点:

>节点1

Node1内容

  >ChildNode1 ChildNode1 Contents >ChildNode1'sChildNode ChildNode1'sChildNode Contents 

>节点2

  Node2 Contents 

问题是我的TreeView将每个XmlNode名称属性绑定到TreeItem。 在文本XmlNode的情况下,它会将#text绑定到TreeItem,这不是我想要的。

所以通过MSDN论坛上的post,我得到了我的答案: http : //social.msdn.microsoft.com/Forums/en-US/wpf/thread/cbdb2420-1403-436f-aa7f-b1e3b1acb398/

因此,诀窍是使用触发器根据遇到的节点类型设置值。

警告是其他类型的节点将被忽略,XML文档可能包含不同的元素,因此这可能不适用于遇到的每种类型的节点。

这是XAML:

                      

 public Window1() { InitializeComponent(); XmlDataProvider dataProvider = this.FindResource("xmlDataProvider") as XmlDataProvider; XmlDocument doc = new XmlDocument(); // Testdocument doc.LoadXml( @" text1text11  text2text21 text22  "); dataProvider.Document = doc; } 

看看我在以下线程上的答案 – 将XML数据绑定到WPF树视图控件我相信这正是您正在寻找的。线程中的链接指向一个post,它为您提供了一个带有选项的分步示例下载源代码。示例的编写方式是将任何 XML文档绑定到WPF树视图