當應用程式需要處理大量資料——新聞文章、食譜、賽事比分、財務圖表等——如何讓使用者輕鬆瀏覽、搜尋與篩選,成為介面設計的核心挑戰。Windows 應用商店應用中的 ListView 控件 正是為了解決此問題而生,它提供網格與列表兩種佈局模式,支援分組、篩選、排序與虛擬化等進階功能,是構建資料密集型應用的基石。
ListView 同時存在於 HTML 與 XAML 兩種開發模型中。在 WinJS (Windows Library for JavaScript) 應用中,只需在 <div> 元素上設定 data-win-control 屬性即可啟用:
<div id="listView" data-win-control="WinJS.UI.ListView"></div>
透過 data-win-options 屬性可聲明式配置 ListView 行為:
<div id="listView"
data-win-control="WinJS.UI.ListView"
data-win-options="{
selectionMode: 'single',
layout: { type: WinJS.UI.GridLayout }
}"></div>
關鍵屬性說明:
single(單選)或 multi(多選,預設)GridLayout(網格,預設)、ListLayout(列表)、CellSpanningLayout(儲存格跨越)ListView 本身不儲存資料,必須搭配 WinJS.Binding.List 物件運作。List 物件將物件陣列繫結至樣板中定義的 HTML 元素——List 定義「顯示什麼」,樣板定義「如何顯示」。
var dataArray = [
{ title: "項目 1", subtitle: "說明文字", backgroundImage: "img1.jpg", key: "group1" },
{ title: "項目 2", subtitle: "說明文字", backgroundImage: "img2.jpg", key: "group1" },
{ title: "項目 3", subtitle: "說明文字", backgroundImage: "img3.jpg", key: "group2" }
];
var list = new WinJS.Binding.List(dataArray);
// 建立分組視圖
var groupedList = list.createGrouped(
function(item) { return item.key; }, // 分組鍵選擇器
function(item) { return { title: item.key }; } // 分組資料產生器
);
listView.winControl.itemDataSource = groupedList.dataSource;
listView.winControl.groupDataSource = groupedList.groups.dataSource;
使用 WinJS.Binding.Template 定義項目外觀:
<div class="itemtemplate" data-win-control="WinJS.Binding.Template">
<div class="item">
<img class="item-image" src="#" data-win-bind="src: backgroundImage; alt: title" />
<div class="item-overlay">
<h4 class="item-title" data-win-bind="textContent: title"></h4>
<h6 class="item-subtitle win-type-ellipsis" data-win-bind="textContent: subtitle"></h6>
</div>
</div>
</div>
群組標題通常包含導航連結,點擊可前往該群組詳細頁面:
<div class="headertemplate" data-win-control="WinJS.Binding.Template">
<button class="group-header win-type-x-large win-type-interactive"
data-win-bind="groupKey: key"
onclick="Application.navigator.pageControl.navigateToGroup(event.srcElement.groupKey)"
role="link" tabindex="-1" type="button">
<span class="group-title win-type-ellipsis" data-win-bind="textContent: title"></span>
<span class="group-chevron"></span>
</button>
</div>
IListDataSource 介面支援無限捲動WinJS.UI.ListView.loadingBehavior 設定為 "incremental"群組標題按鈕點擊時導航至詳細頁面,展示該群組所有項目,是 Windows 應用商店應用的經典導航模式。
根據縮放層級自動切換佈局(如:縮小時顯示群組標題,放大時顯示項目細節),提升大量資料瀏覽體驗。
設定 itemsDraggable: true 與 itemsReorderable: true 即可啟用拖曳排序功能。
WinJS.Utilities.Scheduler 控制渲染優先序,避免阻塞 UI 執行緒WinJS ListView 是構建 Windows 應用商店應用資料呈現層的核心控件。掌握其資料繫結機制、樣板系統、佈局模式與效能優化策略,能讓開發者打造出流暢、美觀且高效能的資料密集型應用體驗。