ListView.selection property

Gets an ISelection that contains the range of currently selected items.


var selection = listView.selection;

Property value

Type: ISelection**

An ISelection object containing the selected items.


Determining the difference when the selection changes

The onselectionchanged event notifies you when the ListView control's selection changes, but it doesn't tell you how the selection changed.

To determine how the selection changed

  1. Before the selection changes, cache the current selection by calling selection.getIndices and storing the result. selection.getIndices returns an Array that contains the indexes of the currently selected items.

    var prevSelection = lv.selection.getIndices(); 

    (Where lv is a ListView control.)

  2. Register for the onselectionchanged event.

  3. When the onselectionchanged event fires, call selection.getIndices again to get an Array of the currently selected item indexes.

    var currentSelection = lv.selection.getIndices();
  4. Compare the two arrays. One way to calculate the difference is to use the Array.filter method.


This example demonstrates how to use the selection property to select all items in a ListView, clear the selection, and display the number of items selected.

<!DOCTYPE html>
    <meta charset="utf-8" />

    <!-- WinJS references -->
    <link href="//Microsoft.WinJS.2.0/css/ui-light.css" rel="stylesheet" />
    <script src="//Microsoft.WinJS.2.0/js/base.js"></script>
    <script src="//Microsoft.WinJS.2.0/js/ui.js"></script>

    <link href="selectionExample.css" rel="stylesheet" />
    <script src="selectionExample.js"></script>
    <script src="/js/data.js"></script>
        <div id="mediumListIconTextTemplate" data-win-control="WinJS.Binding.Template">
            <div style="width: 282px; height: 70px; padding: 5px; overflow: hidden; display: -ms-grid;">

                <!-- Displays the "picture" field. -->
                <img data-win-bind="alt: title; src: picture"
                    style="width: 60px; height: 60px; margin: 5px; -ms-grid-column: 1;" />
                <div style="margin: 5px; -ms-grid-column: 2">

                    <!-- Displays the "title" field. -->
                    <h4 data-win-bind="innerText: title"></h4>

                    <!-- Displays the "text" field. -->
                    <h6 data-win-bind="innerText: text"></h6>

        <div id="selectionExampleListView" data-win-control="WinJS.UI.ListView"
            data-win-options="{itemDataSource : DataExample.itemList.dataSource, 
            itemTemplate: select('#mediumListIconTextTemplate'),
            tapBehavior: 'toggleSelect',
            layout : {type: WinJS.UI.GridLayout}}">

        <button id="selectAllButton">Select all</button>
        <button id="clearSelection">Clear selection</button>
        <p>Items selected:</p>
        <p id="outputParagraph"></p>
(function () {
    "use strict";

    var lView;
    var outputParagraph;

    WinJS.UI.Pages.define("/pages/selection/selectionExample.html", {
        // This function is called whenever a user navigates to this page. It
        // populates the page elements with the app's data.
        ready: function (element, options) {

            lView = element.querySelector("#selectionExampleListView").winControl;
            outputParagraph = element.querySelector("#outputParagraph");
            lView.addEventListener("selectionchanged", this.selectionChanged); 

            element.querySelector("#selectAllButton").addEventListener("click", this.selectAllClicked);
            element.querySelector("#clearSelection").addEventListener("click", this.clearSelection);

        unload: function () {

        updateLayout: function (element, viewState, lastViewState) {

        selectAllClicked: function (eventInfo) {

        clearSelection: function (eventInfo) {

        selectionChanged: function (eventInfo) {
            outputParagraph.innerText = lView.selection.count(); 



Minimum WinJS version

WinJS 4.0



See also


XAML ListView and GridView customizing interactivity sample (Windows)