我有以下类,其中包含下一级的ObservableCollections:
Draw
ObservableCollection<Round>();
Round
ObservableCollection<Formation>();
Formation
因此抽奖由圆形组成,圆形由形成。
我有一个页面,其中有一个按钮可以创建一个随机抽奖,我现在让它调用另一个返回抽奖的类:
this.defaultViewModel[DrawName] = RandomDraw.generate();
我将ListView绑定到Rounds并显示圆形信息没有问题,但是如何显示各个编队?这就是我目前正在做的事情,我不希望能够通过绑定到Formations来显示事物,但我如何访问它?
<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>
答案 0 :(得分:1)
您应该查看分层数据模板,它们由WPF TreeView控件而不是ListViews使用。它们非常适合显示分层数据。当然,与任何WPF控件一样,您可以使用样式和模板完全自定义其外观。以下是一些很好的参考资料:
MSDN How to: Use a TreeView to Display Hierarchical Data
Hierarchical Databinding in WPF
但是,如果您想继续使用ListViews,那么一种方法是将另一个容器控件嵌套在父ListVIew中。 ObservableCollections由特定的WPF元素自动处理,例如Panels。在您的示例中,您可以将第二个TextBlock替换为另一个ListView,其中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>