Question

Avec le code XML suivant ci-dessous je voudrais utiliser un hierarchicaldatatemplate avec WPF treeview.

En fonction de la valeur en type J'ai l'intention d'utiliser une des images différentes avec le nom à côté de lui et ensuite pour obtenir le nom de l' valeur à partir de l'id de la balise.

    <key type='Configuration'>
        <id field='name' value='Some value'/>
    </key>
    <key type='Container'>
        <id field='name' value='MyName'/>
        <key type='Container'>
            <id field='name' value='Data12345'/>
            <key type='Container'>
                <id field='name' value='Data987655'/>
                <key type='Circuit'>
                    <id field='name' value='Data63236723'/>
                </key>
            </key>
        </key>
    </key>

J'ai essayé quelques-uns des exemples simples, mais aucun d'entre eux montrent comment utiliser hierarchicaldatatemplate avec des attributs et aussi comment l'obtenir le texte avec la liaison de ces attributs.

Ce serait génial si quelqu'un pouvait montrer comment la hierarchicaldatatemplate devrait ressembler à ce XML pour être utilisé avec un TreeView.

Était-ce utile?

La solution

Au début, je pensais que tu ne pouvais pas répondre à ces exigences que le schéma XML.Cependant, après l'avoir essayé dans un projet de test, il semble que tout fonctionne bien:

enter image description here

Vous aurez besoin d'utiliser un XmlDataProvider pour accéder au fichier XML:

<XmlDataProvider Source="/WpfApplication2;component/Xml/TestXMLFile.xml" 
    XPath="root/key" />

Vous aurez également besoin d'ajouter un root nœud XML, afin de la rendre légale:

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <key type='Configuration'>
        <id field='name' value='Some value'/>
    </key>
    <key type='Container'>
        <id field='name' value='MyName'/>
        <key type='Container'>
            <id field='name' value='Data12345'/>
            <key type='Container'>
                <id field='name' value='Data987655'/>
                <key type='Circuit'>
                    <id field='name' value='Data63236723'/>
                </key>
            </key>
        </key>
    </key>
</root>

Ensuite, vous devez ajouter l' TreeView:

<TreeView ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemTemplate}" />

Et puis enfin, ajouter le HierarchicalDataTemplate dans votre Resources section:

<HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding XPath=key}"  DataType="key">
    <StackPanel Orientation="Horizontal" Margin="0,2">
        <Image>
            <Image.Style>
                <Style>
                    <Setter Property="Image.Source" Value="Images/Default.png" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding XPath=@type}" Value="Container">
                            <Setter Property="Image.Source" Value="Images/Container.png" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding XPath=@type}" Value="Configuration">
                            <Setter Property="Image.Source" Value="Images/Configuration.png" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding XPath=@type}" Value="Circuit">
                            <Setter Property="Image.Source" Value="Images/Circuit.png" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>
        <TextBlock Text="{Binding XPath=id/@value}" Margin="5,0" />
    </StackPanel>
</HierarchicalDataTemplate>

Je n'ai pas vraiment à faire la même chose pour vous, donc je vais vous laisser à modifier à votre convenance.J'espère que vous allez être ok à partir d'ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top