XML数据绑定到TreeView(或Tab控件),基于不同的属性绑定属性

时间:2009-08-15 12:08:50

标签: wpf xml data-binding treeview tabcontrol

我有一些xml:

<Test>
  <thing location="home" status="good"/>
  <thing location="work" status="bad"/>
  <thing location="mountains" status="good"/>
</Test>

TreeView上的叶子是status属性的值;节点将是location属性的值。

├──bad
│.....└──work
└──good
.......├──home
.......└──山脉

目前,我手动填充TreeView(或TabControl),遍历xml,将节点添加到相应的叶子中。
这可以通过数据绑定完成吗?我猜测转换器会涉及......
谢谢你的任何建议。

2 个答案:

答案 0 :(得分:1)

我一直在寻找相同类型的信息,并发现Stack Overflow上的this question非常有帮助。您只需指定XmlDataProvider和一些HierarchicalDataTemplate元素。然后,一些带有XPath属性的简单数据绑定将它们整合在一起。查看上面的链接了解更多详情。

答案 1 :(得分:0)

假设您要绑定到XmlDataSource,您可以使用具有以下内容的TransformFile:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/Test">
    <Test>
      <good>
        <xsl:for-each select="thing[@status='good']">
           <xsl:element name="{@location}"/>
        </xsl:for-each>
      </good>
      <bad>
        <xsl:for-each select="thing[@status='bad']">
          <xsl:element name="{@location}"/>
        </xsl:for-each>
      </bad>
    </Test>
  </xsl:template>
</xsl:stylesheet>

向XmlDataSource添加XPath="/Test/*"属性以删除“Test”根元素。