Pergunta

Com o XML seguinte abaixo, eu gostaria de usar um hierarchicaldatatemplate com um treeview do WPF.

Dependendo do valor em tipo Eu pretendo usar uma imagem diferente com o nome ao lado e, em seguida, para obter o nome do valor a partir da etiqueta de identificação.

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

Eu tentei alguns exemplos simples mas nenhuma delas mostra como usar hierarchicaldatatemplate com atributos e também uma forma de a obter o texto com ligação de atributos.

Seria ótimo se alguém pudesse mostrar como a hierarchicaldatatemplate deve olhar como este XML para ser usado com um TreeView.

Foi útil?

Solução

No começo, eu pensei que você não podia cumprir esses requisitos com o esquema XML.No entanto, depois de experimentá-la em um projeto de teste, parece que tudo funciona muito bem:

enter image description here

Você vai precisar usar um XmlDataProvider para acessar o arquivo XML:

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

Você também precisará adicionar um root nó XML para torná-lo 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>

Em seguida, você precisa adicionar o TreeView:

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

E, finalmente, adicionar o HierarchicalDataTemplate em seu Resources seção:

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

Eu realmente não queria fazer a coisa toda para você, então eu vou deixar você para ajustá-lo ao seu gosto.Eu confio em você vai ficar bem aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top