2009-08-15 77 views
0

我有一些的xml:XML数据绑定到树视图(或Tab控制),绑定属性根据不同的属性

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

TreeView叶子是状态属性的值;节点将是位置属性的值。

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

目前,我手动填充TreeView(或TabControl),迭代通过xml,将节点添加到适当的叶。
这可以通过数据绑定完成吗?我猜一个转换器将涉及...
感谢您的任何建议。

回答

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> 

XPath="/Test/*"属性添加到的XmlDataSource删除“测试”根元素。

+0

感谢您的回复,这非常有帮助。 我怀疑我需要TreeView和TabControl项目的xaml中的DataTemplates? – Number8 2009-08-18 13:24:09

+0

您可能不需要DataTemplates,但我对WPF的了解有限。不用尝试DataBinding,看看它看起来如何。如果你只是DataBind的XmlDataSource的ASP.NET TreeView的作品。我愚蠢地认为你的问题是关于一个ASP.NET的TreeView(你需要一个“wpf”标签在你的问题。) – 2009-08-19 15:28:09

1

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