显示两层以下的数据

本文关键字:数据 两层 显示 | 更新日期: 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>