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

Windows 8 类似于GridView的页面,但具有静态组,每个组部分将具有不同的布局,windows-8,microsoft-metro,windows-runtime,winrt-xaml,Windows 8,Microsoft Metro,Windows Runtime,Winrt Xaml,我想在Contoso Cookbook应用程序中创建一个有点像Grouped Items页面的页面(如果您看过的话)。基本上,它是绑定到CollectionViewSource的GridView <CollectionViewSource x:Name="groupedItemsViewSource" Source="{Binding Groups}" IsSourceGrouped="true" ItemsPath=

我想在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属性绑定每个单独的部分

但是,我的页面的不同之处在于,我的组是静态的,它们是:时间、类别、列表。第一个将有一个listview,第二个将有一个分片网格,第三个将是另一个listview

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

那么你会怎么做呢?因此,从本质上讲,它需要与GridView完全相同的水平滚动和换行,但是这些组有完全不同的布局,理想情况下,每个组都应该可以直接在XAML中定义


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

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

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

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

  • 使用标题模板和要使用的面板(
    ItemsPanelTemplate
    (MSDN)),定义两种不同的组样式

  • 定义具有自定义逻辑的类,以选择要用于组的组样式。()

  • 在XAML中的GridView上设置GroupStyleSelector属性

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


  • 这可以通过一个简单的步骤来完成。您可能有多个组,但在每个组中,项目的样式都不同。有关更多帮助文章,请参阅此部分。

    GroupStyleSelector不是为管理同一级别组的不同样式而设计的。不管怎样,我试过了,但没有结果。尽管我能够为每个小组返回正确的风格。