2009-08-15 74 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屬性的簡單數據綁定將它們一起拉到一起。查看上面的鏈接瞭解更多詳情。