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

时间:2012-07-28 18:37:10

标签: windows-8 winjs

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

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

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

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

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

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

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

    有没有人有关于此处所需内容的高级视图的提示?感谢。

1 个答案:

答案 0 :(得分:0)

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

你的其他东西需要一些学习我建议你看一下ListView样本,以真正理解数据源API的细节。

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

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