Frage

Mit dem folgenden XML möchte ich a verwenden hierarchicaldatatemplate mit einer WPF-Baumansicht.

Je nach Wert in Typ Ich beabsichtige, ein anderes Bild mit dem Namen daneben zu verwenden und dann den Namen von zu erhalten Wert aus dem ID-Tag.

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

Ich habe einige der einfachen Beispiele ausprobiert, aber keines davon zeigt, wie man hierarchische Datenvorlagen mit Attributen verwendet und wie man den Text mit Bindung aus den Attributen erhält.

Es wäre großartig, wenn jemand zeigen könnte, wie die hierarchische Datenvorlage aussehen sollte, damit dieses XML mit einer TreeView verwendet werden kann.

War es hilfreich?

Lösung

Zuerst dachte ich, dass Sie diese Anforderungen mit diesem XML-Schema nicht erfüllen könnten.Nach dem Ausprobieren in einem Testprojekt scheint jedoch alles einwandfrei zu funktionieren:

enter image description here

Sie müssen eine verwenden XmlDataProvider So greifen Sie auf die XML-Datei zu:

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

Sie müssen außerdem eine hinzufügen root Knoten zum XML, um es legal zu machen:

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

Dann müssen Sie das hinzufügen TreeView:

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

Und schließlich fügen Sie das hinzu HierarchicalDataTemplate in dein Resources Abschnitt:

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

Ich hatte nicht wirklich vor, das Ganze für Sie zu erledigen, also überlasse ich es Ihnen, es nach Ihren Wünschen zu optimieren.Ich vertraue darauf, dass es dir von hier aus gut gehen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top