显示两个级别的数据

时间:2014-06-04 06:59:16

标签: c# xaml mvvm windows-phone-8.1

我有以下类,其中包含下一级的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>

1 个答案:

答案 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>