如何将Xml属性绑定到Treeview节点,同时将XDocument数据绑定到WPF Treeview

我有一个XML需要数据绑定到WPF TreeView 。 这里的XML可以有不同的结构。 TreeView应该是数据绑定通用的,足以加载任何层次结构的排列。 但是,节点上的XAttribute (称为Title )应该数据绑定到TreeViewItem的头文本不是节点名

要绑定的XML:

 

XAML:

           

XAML的代码隐藏,它将XML加载到XDocument并将其绑定到TreeView

 public partial class TreeViewer : Window { public TreeViewer() { InitializeComponent(); XDocument doc = XDocument.Parse(File.ReadAllText(@"C:\MyWizard.xml")); _treeView.DataContext = doc; } } 

因此,在XAML标记中,我们将Name绑定到TreeViewItem的标头。

  

但是,我想将它绑定到上面Xml中Section,Loop和Page的Title属性。 我读到在绑定XDocument时不可能使用XPath。 但必须有一种方法将Title属性绑定到TreeViewItem的Header文本。 我尝试使用@Title,。[@ Title]等。但似乎都没有用。

MSDN论坛上的这个主题也有类似的讨论。

任何指针都会非常有用。

华友! 我想出了如何绑定XAttribute。 它不直观,也不容易想象。 但这是如何做到的。

  

很难想象Title可以直接用于方括号中。

更多@这个MSDN链接

我认为您需要做的就是为XML中的每个节点类型创建一个HierarchicalDataTemplate ,将xml加载到XmlDataProvider中 ,然后将绑定到TreeView。 电视与XDP协同工作以绑定数据,并且在某个地方,他们会找出您定义的HDT,并将其DataType与XML中的节点名称相匹配。 您可能会遇到一些问题,您的XPATH会随着不同类型的数据而变化,但保持这些灵活性是另一个问题。

例如,我有一个小的正则表达式测试应用程序。 它包括一个帮助系统,它基本上是树中列出的所有不同的正则表达式部分:包含描述的类别和部分,工具提示和其他内容。 有关部件的数据存储为xml数据源。 由于它是静态的,我只是用应用程序的资源创建了一个静态资源:

           

接下来,我为数据中的每个节点类型创建了HierarchicalDataTemplates (同样,所有这些都在应用程序的资源中):

             

最后,我只是将树绑定到XmlDataProvider:

   

而这就是你所要做的。 TreeView和XmlDataProvider将负责为数据中的正确节点查找和使用正确的HDT 。 所有这一切中最困难的部分是找出绑定的xpath。 它可能会有点棘手,好像你的路径不正确,你最终会在树中得不到任何错误(没有任何错误(有很多方法可以增加WPF数据绑定中的错误报告,但这是另一个问题) 。