4

我想在 Contoso Cookbook 应用程序中创建一个有点像 Grouped Items Page 的页面(如果你看过的话)。基本上,它是一个绑定到 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 属性将 Groups 绑定到 CVS 数据源的最高级别,然后使用 ItemsPath 属性绑定每个单独的部分。

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

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

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

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

4

2 回答 2

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. 在视图模型中定义静态组以包含您想要的数据:(时间、类别、列表)

于 2012-09-13T02:56:40.367 回答
2

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

于 2012-09-13T08:15:00.303 回答