类似GridView的页面但具有静态组和每个组部分将具有不同的布局

时间:2012-09-12 14:58:14

标签: windows-8 microsoft-metro windows-runtime winrt-xaml

我想创建一个类似于Contoso Cookbook应用程序中的Grouped Items页面的页面(如果你已经看过它)。基本上,它是一个绑定到CollectionViewSource的GridView。

    <CollectionViewSource
        x:Name="groupedItemsViewSource"
        Source="{Binding Groups}"
        IsSourceGrouped="true"
        ItemsPath="TopItems"
        d:Source="{Binding AllGroups, Source={d:DesignInstance Type=data:SampleDataSource, IsDesignTimeCreatable=True}}"/>

GridView似乎使用Source属性将组绑定到CVS数据源的最高级别,然后使用ItemsPath属性绑定每个单独的部分。

但是,我的页面不同之处在于我的组是静态的,它们是:Times,Categories,List。第一个是listview,第二个是tile网格,第三个是listview。

此外,每个组部分本身都有不同的布局。它不仅仅是重复组和重复项目布局。我希望能够直接在XAML中为每个组定义“静态”组和布局,甚至可以将测试数据添加到这些元素,但似乎GridView 需要数据绑定,即使只是在设计时对虚拟数据源。

那你怎么做?基本上,它需要与GridView完全相同的水平滚动和包装,但是这些组具有完全不同的布局,理想情况下每个组应该直接在XAML中定义?

我正在考虑创建一个包含在滚动查看器中的普通网格......你怎么看?你会做什么?

2 个答案:

答案 0 :(得分:2)

在GridView中,可以为组分配GroupStyle,如下所示:

<GridView.GroupStyle>
    <GroupStyle HeaderTemplate="{StaticResource MyGroupHeaderTemplate}" 
                Panel="{StaticResource MyGroupItemsPanelTemplate}" 
                HidesIfEmpty="True" />
</GridView.GroupStyle>

现在,在您的情况下,每个组都需要自己的GroupStyle。 因此,您可以:

,而不是在GridView中的每个组中使用ListView
  1. 使用标题模板和要使用的面板(ItemsPanelTemplate(MSDN))定义2种不同的组样式

  2. 定义一个具有自定义逻辑的类,以选择要用于组的组样式。(GroupStyleSelector

  3. 在XAML中的GridView上设置GroupStyleSelector属性

  4. 在视图模型中定义静态组以包含所需的数据:(时间,类别,列表)

答案 1 :(得分:2)

这可以通过DataTemplateSelector来完成。您将拥有多个组,但在每个组中,项目的样式不同。有关更多帮助文章,请参阅此SO post