Pergunta

Eu tenho um TreeView que tem três níveis.

Vamos dizer que é um TreeView liga, divisão e equipe.

Agora, quando eu selecionar cada um dos itens na árvore, eu gostaria de ver informações detalhadas sobre ele.

O que é a melhor maneira de conseguir isso?

Desde Grid faz não itens (como um ListBox), eu não posso simplesmente definir seu ItemsSource e fazer uma DataTemplate ...

Eu pensei sobre como usar um ListBox que conterá somente o item selecionado, mas este parece ser muito ruim ...

Graças.

Foi útil?

Solução

Você primeiro definir os 3 DataTemplates para suas classes de liga, divisão e da equipe. Depois, você vincular o TreeView à raiz dos seus objetos. Suas classes de liga e Divisão deve ter uma propriedade Crianças que retorna as crianças. Todas as classes devem ter uma propriedade de nome.

Então, quando você quer mostrar um único objeto, use o ContentPresenter, eo ligamento seu conteúdo ao SelectedItem se o TreeView.

Por exemplo:

<StackPanel>
   <StackPanel.Resources>

       <DataTemplate DataType="{x:Type your_namespace:League}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

       <DataTemplate DataType="{x:Type your_namespace:Division}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

       <DataTemplate DataType="{x:Type your_namespace:Team}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

   </StackPanel.Resources>

   <TreeView x:Name="_tree" ItemsSource="{Binding RootOfYourItems}">
      <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text={Binding Name}/>
        </HierarchicalDataTemplate>
   </TreeView>

   <ContentPresenter Content="{Binding Path=SelectedItem, ElementName=_tree}" />

</StackPanel>

Este código não foi testado ou compilado, ele simplesmente fornecido como um exemplo.

Outras dicas

Gostaria de criar um viewmodel com propriedades para a structur árvore, a seleção atual e os detalhes para a seleção atual.

A estrutura da árvore é unidirecional ligado ao treeview, o SelectedItem do treeview é OneWayToSource vinculado à propriedade seleção atual (devido às limitações da propriedade). Esta propriedade altera a lista de itens filhos uma vez que as alterações de seleção atuais, e os itens filhos são obrigados a caixa de listagem de exibi-los.

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