Pregunta

Con el siguiente XML a continuación me gustaría usar un hierarchicaldatatemplate con una vista de árbol de WPF.

Dependiendo del valor en tipo Tengo la intención de usar imágenes diferentes con el nombre al lado y luego obtener el nombre del valor de la etiqueta de identificación.

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

He probado algunos de los ejemplos simples, pero ninguno muestra cómo usar la plantilla de datos jerárquica con atributos y también cómo obtener el texto con enlace de los atributos.

Sería fantástico si alguien pudiera mostrar cómo debería verse la plantilla de datos jerárquica para que este XML se use con un TreeView.

¿Fue útil?

Solución

Al principio pensé que no se podían cumplir esos requisitos con ese esquema XML.Sin embargo, después de probarlo en un proyecto de prueba, parece que todo funciona bien:

enter image description here

Necesitará usar un XmlDataProvider para acceder al archivo XML:

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

También necesitarás agregar un root nodo al XML para hacerlo legal:

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

Entonces necesitas agregar el TreeView:

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

Y finalmente, agregue el HierarchicalDataTemplate en tu Resources sección:

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

Realmente no quise hacer todo por ti, así que te dejaré que lo modifiques a tu gusto.Confío en que estarás bien desde aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top