2009-08-15 4 views
0

j'ai quelques xml:XML liaison de données à TreeView (ou contrôle Tab), se lient attribut sur la base de différents attributs

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

Les feuilles sur la TreeView sont les valeurs de l'attribut d'état; les nœuds seront la valeur de l'attribut location.

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

Actuellement, je remplis le TreeView (ou TabControl) manuellement, en parcourant le xml, en ajoutant les nœuds à la feuille appropriée.
Est-ce que cela peut se faire via la liaison de données? Je devine qu'un convertisseur sera impliqué ...
Merci pour tout conseil.

Répondre

0

En supposant que vous allez lier à un XmlDataSource vous pouvez utiliser un TransformFile avec le contenu suivant:

<?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> 

Ajouter une propriété XPath="/Test/*" au XmlDataSource pour enlever l'élément racine « Test ».

+0

Merci pour la réponse, c'est très utile. Je suppose que j'ai besoin de DataTemplates dans le xaml pour les éléments TreeView et TabControl? – Number8

+0

Vous n'avez peut-être pas besoin de DataTemplates, mais ma connaissance de WPF est limitée. Essayez DataBinding sans et voyez à quoi cela ressemble. Le TreeView ASP.NET fonctionne si vous juste DataBind le XmlDataSource. J'ai stupidement supposé que votre question était sur un TreeView ASP.NET (vous avez besoin d'un tag "wpf" sur votre question.) –

1

Je cherchais le même type d'information et j'ai trouvé this question sur Stack Overflow très utile. Vous devez simplement spécifier le XmlDataProvider et certains éléments HierarchicalDataTemplate. Ensuite, certaines liaisons de données simples avec les attributs XPath le rassemblent. Consultez le lien ci-dessus pour plus de détails.

Questions connexes