回答
這是可能的。 ObservableCollection不提供排序選項,因此您必須創建一個新的集合,該集合按所選屬性排序。請參閱以下示例代碼。有關其他排序選項,請閱讀博客文章here和another stackoverflow thread。
// TODO: Create an appropriate data model for your problem domain to replace the sample data
var group = SampleDataSource.GetGroup((String)navigationParameter);
this.DefaultViewModel["Group"] = group;
//this.DefaultViewModel["Items"] = group.Items;
// Sort items by creating a new collection
ObservableCollection<SampleDataItem> grpSorted = new ObservableCollection<SampleDataItem>(
group.Items.OrderBy(grp => grp.Title));
this.DefaultViewModel["Items"] = grpSorted;
這是C#,但根據到問題上的標籤,他正在尋找一個JavaScript/WinJS解決方案。 – 2013-02-20 17:53:42
我在同一個問題上掙扎,既沒有找到有用的例子,也沒有提示。然後我開始將SortedListProjection和GroupedSortedListProjection結合起來,最終使它工作。
我的用例是按照字母順序排列的組,按升序排列,但在一個組內,按時間戳順序排列。
這是我如何設置它的JavaScript文件中:
var list = new WinJS.Binding.List(); // list gets populated later in the code
var sortedList = list.createSorted(compareItems);
var groupedList = list.createGrouped(getGroupKey, getGroupData, compareGroups);
WinJS.Namespace.define("my.stuff", {
sortedList: sortedList,
groupedList: groupedList
});
最重要的事情是保持與分組同步排序的項目。因此項目排序功能正在調用分組功能。
下面是用於排序和分組的所有四個功能:
compareItems = function (leftItem, rightItem) {
let leftKey = getGroupKey(leftItem);
let rightKey = getGroupKey(rightItem);
let compare = compareGroups(leftKey, rightKey);
if (compare == 0) { // if keys are equal compare timestamps
return leftItem.timestamp < rightItem.timestamp ? 1
: leftItem.timestamp > rightItem.timestamp ? -1 : 0;
}
return compare;
};
getGroupKey = function (item) {
return item.name + item.category;
};
getGroupData = function (item) {
return {
name: item.name + " (" + item.category + ")"
};
};
compareGroups = function (leftKey, rightKey) {
return leftKey.toUpperCase().localeCompare(rightKey);
};
最後,兩個列表爲ListView的合併聲明:
<div id="dataDeliveriesList" class="hidden"
data-win-control="WinJS.UI.ListView"
data-win-options="{
itemDataSource: my.stuff.sortedList.dataSource,
itemTemplate: select('#itemTemplate'),
groupDataSource: my.stuff.groupedList.groups.dataSource,
groupHeaderTemplate: select('#groupHeaderTemplate'),
layout: {
type: WinJS.UI.ListLayout
}
}">
</div>
只有我自己才明白,你可以利用排序功能中的分組功能,並保持密鑰生成和比較同步: – phileas74 2016-11-22 23:25:55
- 1. 使用圖像對列表視圖中的項目進行分組
- 2. 在視圖中對項目進行分組
- 3. 分組列表中的項目視圖
- 4. 如何在剃鬚刀視圖中對視圖中的項目進行排序
- 5. 在Python 2.3中按項目頻率對列表進行排序
- 6. 如何在列表框中對項目進行排序
- 7. 如何在列表視圖中對一行值進行分組
- 8. 如何在分段表視圖中對距離進行排序?
- 9. MYSQL對組中的項目進行排序然後對它們進行排序
- 10. 如何對列表框中的項目進行升序排序
- 11. 在NativeScript中對列表視圖進行排序
- 12. 列表視圖項目排序
- 13. 在網格視圖上對項目進行分組
- 14. 使用Optaplanner對列表中的項目進行排序
- 15. 如何對列表中的項目進行排序
- 16. C#:對數組列表進行排序
- 17. Android如何按列在列表視圖中對列表進行排序
- 18. 在WPF中的列表視圖中對列中的Alpha進行數列排序
- 19. 如何在ASP.NET MVC視圖中對HTML列表項進行分組?
- 20. Python:按字母順序對列表進行排序/分組
- 21. 在Erlang中對列表進行排序
- 22. 在Groovy中對列表進行排序
- 23. 在Prolog中對列表進行排序
- 24. 在C中對列表進行排序#
- 25. 在類中對列表進行排序
- 26. 對嵌套列表中的一組特定項目進行排序
- 27. 按字母順序對部分表格視圖進行排序數組
- 28. 排序/成組列表中的項目
- 29. 如何對錶格視圖項進行排序?
- 30. 在圖庫中對花式框項目進行重新排序
請提供代碼 – Dom 2013-02-12 20:52:20