WPF múltipla mestre / detalhes, mesma grade
-
05-07-2019 - |
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.
Solução
Você primeiro definir os 3 DataTemplate
s 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.