0

我想使用 WinJS 在我的 Windows 8 Metro 应用程序中复制音乐应用程序的歌曲视图。

我正在使用 StorageDataSource 从列表视图中的音乐库中加载文件。这很好用,现在我想按某些属性(例如:专辑)对音乐文件进行分组。

StorageDataSource 不支持分组,所以我正在寻找有关如何进行此操作的提示。它必须高效,因为用户可以在库中拥有许多项目,但我不需要它在添加/删除新文件时自动更新(尽管它会很好)。

我目前的理解是我需要构建 2 个自定义数据源:

  1. 一个或 ListView 的 itemDataSource,并且是 StorageDataSource 的包装器。例如:getItemsFromIndex 实现在底层数据源中查询其包装在文字中的项目。我不能只设置 StorageDataSource,因为它的对象是不可变的。

  2. 一个用于 listView 的 groupDataSource。当应用程序加载时,我手动构建它一次,通过迭代我的第一个 StorageDataSource 并确定我有多少组,以及每个组从 itemDataSource 索引开始的位置。

它有效,但我想知道是否有更好的方法。在 ListLayout 中设置组似乎也是不可能的,它会强制项目水平显示。

有没有人有关于这里需要什么的高级视图的提示?谢谢。

4

1 回答 1

0

首先,如果您使用不支持分组的列表布局,您是正确的;它仅在网格布局中受支持。您可以选择使用自定义项模板呈现功能为您可以根据需要设置样式的组插入假数据项。

你的其他东西需要一些学习,我建议你看一下 ListView 示例,以真正了解数据源 API 的来龙去脉。

一种选择是让 ListView 通过提供 computerDataSourceGroups 函数为您计算它们:http: //msdn.microsoft.com/en-us/library/windows/apps/hh700578.aspx

另一种选择是 StorageDataSource 源适合您查看;将分组添加到此作为原始数据源实际上可能是您最有效和可维护的解决方案。它有望让您继续利用列表视图的虚拟化,而不会导致数据源被虚拟化。您应该在 VS 的 ui.js 中的引用节点中找到源代码。

于 2012-07-28T23:01:22.727 回答