Windows 8 ListView绑定到WinJS中具有分组功能的存储文件

Windows 8 ListView绑定到WinJS中具有分组功能的存储文件,windows-8,winjs,Windows 8,Winjs,我想在我的Windows 8 Metro应用程序中使用WinJS复制音乐应用程序的歌曲视图 我正在使用StorageDataSource从列表视图中的音乐库加载文件。这很好,现在我想按一些属性(例如:唱片集)对音乐文件进行分组 StorageDataSource不支持分组,因此我正在寻找有关如何进行分组的提示。它必须是高效的,因为用户可以在库中有许多项,但我不需要它在添加/删除新文件时自动更新(尽管这会很好) 我目前的理解是,我需要构建两个自定义数据源: ListView的一个或多个itemDa

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

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

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

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

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

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

  • 这很有效,但我想知道是否有更好的方法。在ListLayout中似乎不可能有组,并且它强制项目水平显示


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

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

    剩下的内容需要一些学习,我建议您看看ListView示例,真正了解数据源API的细节

    一个选项是通过提供computerDataSourceGroups函数,让ListView为您计算它们:


    另一个选择是StorageDataSource源是您可以查看的正确来源;事实上,将分组作为原始数据源添加到其中可能是最有效和可维护的解决方案。它有望让您继续利用listview的虚拟化,而不会导致数据源去虚拟化。您应该在VS的references节点的ui.js中找到源代码。

    谢谢。这看起来是当前SDK的最佳答案。如果能看到这样一个真实的例子,那就太好了,因为我不相信这是一个罕见的现象,尤其是对于“管理列表”类型的应用程序@mleroy,如果可以的话,你应该分享你的发现。