Отображать данные с двух уровней вниз
-
21-12-2019 - |
Вопрос
У меня есть следующие классы, которые содержат наблюдательные элементы следующего уровня вниз:
Draw
ObservableCollection<Round>();
Round
ObservableCollection<Formation>();
Formation
.
Так что ничья состоит из раундов, раунды состоят из образований.
У меня есть страница, которая имеет кнопку для создания случайного розыгрыша, у меня в настоящее время он вызывает другой класс, который возвращает ничьей:
this.defaultViewModel[DrawName] = RandomDraw.generate();
.
У меня нет проблем, связывающих список для раундов и отображения круглой информации, но как я могу отображать отдельные формирования?Это то, что я в настоящее время делаю, я не ожидал, что сможет просто показать вещи, привязывающие к образованию, но как мне получить доступ?
<ListView
ItemsSource="{Binding Rounds}"
IsItemClickEnabled="True"
ItemClick="ItemView_ItemClick"
ContinuumNavigationTransitionInfo.ExitElementContainer="True">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,9.5">
<TextBlock
Text="{Binding RoundNumber}"
TextWrapping="Wrap"
Pivot.SlideInAnimationGroup="1"
CommonNavigationTransitionInfo.IsStaggerElement="True"
Style="{ThemeResource ListViewItemTextBlockStyle}"
Margin="0,0,19,0"/>
<TextBlock
Text="{Binding Formations}"
TextWrapping="WrapWholeWords"
Pivot.SlideInAnimationGroup="2"
CommonNavigationTransitionInfo.IsStaggerElement="True"
Style="{ThemeResource ListViewItemContentTextBlockStyle}"
Margin="0,0,19,0"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
. Решение
Вы должны взглянуть на иерархические шаблоны данных, которые используются элементом управления WPF TreeView, а не список просмотров. Они натуральные пригодные для демонстрации иерархических данных. Конечно, как любой контроль WPF, вы можете полностью настроить свой внешний вид, используя стиль и шаблоны. Вот несколько хороших ссылок:
MSDN Как: использовать TreeView для отображения иерархических данных < / P >.
Иерархическое подтверждение в WPF
Однако, если вы хотите использовать использование ListViews, то один из способов сделать это - это вставать на другой элемент управления контейнера внутри родительского списка. Облюданные элементы обработки автоматически обрабатываются определенными элементами WPF, такие как панели. В вашем примере вы можете заменить второй текстовыйБлок с другим ListView, с помощью ItemTemplate, аналогичной первой. Это также может быть любая коллекционная панель, такая как StackPanel.
<ListView
ItemsSource="{Binding Rounds}"
IsItemClickEnabled="True"
ItemClick="ItemView_ItemClick"
ContinuumNavigationTransitionInfo.ExitElementContainer="True">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,9.5">
<TextBlock
Text="{Binding RoundNumber}"
TextWrapping="Wrap"
Pivot.SlideInAnimationGroup="1"
CommonNavigationTransitionInfo.IsStaggerElement="True"
Style="{ThemeResource ListViewItemTextBlockStyle}"
Margin="0,0,19,0"/>
<!-- CHANGED CODE HERE -->
<ListView
ItemsSource="{Binding Formations}"
...>
<ListView.ItemTemplate>...</ListView.ItemTemplate>
</ListView>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
.