WPF Несколько основных / подробных данных, одна и та же сетка
-
05-07-2019 - |
Вопрос
У меня есть TreeView
который имеет три уровня.
Допустим, это лига, дивизион и команда TreeView
.
Теперь, когда я выбираю каждый из элементов в дереве, я хотел бы увидеть подробную информацию о нем.
Каков наилучший способ достичь этого?
С тех пор как Grid
не содержит элементов (например, ListBox
), я не могу просто установить его ItemsSource
и сделать DataTemplate
...
Я думал об использовании ListBox
который будет содержать только выбранный элемент, но это кажется очень плохим...
Спасибо.
Решение
Сначала вы определяете 3 DataTemplate
s для вашей лиги, дивизиона и командных классов.После этого вы связываете TreeView
к корню ваших объектов.Ваши классы лиги и дивизиона должны иметь свойство Children, которое возвращает дочерние элементы.Все ваши классы должны иметь свойство Name.
Затем, когда вы хотите показать один объект, используйте ContentPresenter
, и привязать его содержимое к SelectedItem
если в TreeView
.
Например:
<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>
Этот код не был протестирован или скомпилирован, он просто приведен в качестве примера.
Другие советы
Я бы создал viewmodel со свойствами для древовидной структуры, текущего выделения и подробными сведениями о текущем выделении.
Древовидная структура односторонне привязана к treeview, выбранный элемент из treeview является OneWayToSource, привязанным к текущему свойству выбора (из-за ограничений свойства).Это свойство изменяет список дочерних элементов при изменении текущего выбора, и дочерние элементы привязываются к отображающему их списковому полю.