显示两层以下的数据
本文关键字:数据 两层 显示 | 更新日期: 2023-09-27 18:06:41
我有以下类,它们包含下一级的observablecollection:
Draw
ObservableCollection<Round>();
Round
ObservableCollection<Formation>();
Formation
平局是由回合组成的,回合是由阵型组成的。
我有一个页面,其中有一个按钮来创建一个随机抽奖,我目前有它调用另一个类返回抽奖:
this.defaultViewModel[DrawName] = RandomDraw.generate();
我没有问题绑定一个ListView轮和显示轮的信息,但我如何显示个别的形式?这就是我目前正在做的,我不希望能够通过绑定到阵型来显示东西,但我如何访问它?
<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控件而不是ListViews使用的。它们非常适合显示分层数据。当然,与任何WPF控件一样,您可以使用样式和模板完全自定义它们的外观。以下是一些很好的参考:
如何:使用TreeView显示分层数据WPF中的分层数据绑定
然而,如果你想继续使用ListVIew,那么一种方法是在父ListVIew中嵌套另一个容器控件。observablecolltions由特定的WPF元素(如Panels)自动处理。在您的示例中,您可以用另一个ListView替换第二个TextBlock,并使用与第一个类似的ItemTemplate。它也可以是任何类似于collection的Panel元素,比如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>