List Configuration

    An object defining configuration options for the dxList widget.

    accessKey

    Specifies a shortcut key that sets focus on the widget element.

    Type: String
    Default Value: null

    The accessKey option value is passed to the accesskey attribute of the actual HTML element of the widget.

    activeStateEnabled

    A Boolean value specifying whether or not the widget changes its state when interacting with a user.

    Type: Boolean
    Default Value: true

    This option is used when the widget is displayed on a platform whose guidelines include the active state change for widgets.

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            bindingOptions: {
                activeStateEnabled: 'enableActiveState',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">activeStateEnabled</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'enableActiveState'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource("/Content/data/states.txt");
        $scope.enableActiveState = true;
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        activeStateEnabled: enableActiveState,
        height: '80%'
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">activeStateEnabled</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: enableActiveState
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        enableActiveState: ko.observable(true)
    }
    ko.applyBindings(myViewModel);
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">activeStateEnabled</div>
            <div class="dx-field-value" id="activeStateSelector"></div>
        </div>
    </div>
    
    $("#myList").dxList({
        height: '80%',
        dataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#activeStateSelector").dxSwitch({
        value: true,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("activeStateEnabled", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    allowItemDeleting

    Specifies whether or not an end user can delete list items.

    Type: Boolean
    Default Value: false

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            itemDeleteMode: 'static',
            bindingOptions: {
                allowItemDeleting: 'allowDeleting',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">allowItemDeleting</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'allowDeleting'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource([]);
        $scope.allowDeleting = false;
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '80%',
        itemDeleteMode: 'static',
        allowItemDeleting: allowDeleting
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">allowItemDeleting</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: allowDeleting
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource([]),
        allowDeleting: ko.observable(false)
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">allowItemDeleting</div>
            <div class="dx-field-value" id="allowDeletingSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource([]);
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        itemDeleteMode: 'static',
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        },
        allowItemDeleting: false
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.load();
    }, "json");
    $("#allowDeletingSelector").dxSwitch({
        value: false,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("allowItemDeleting", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    allowItemReordering

    Specifies whether or not an end user can reorder list items.

    Type: Boolean
    Default Value: false

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            bindingOptions: {
                allowItemReordering: 'allowReordering',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">allowItemReordering</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'allowReordering'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource([]);
        $scope.allowReordering = false;
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '80%',
        allowItemReordering: allowReordering
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">allowItemReordering</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: allowReordering
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource([]),
        allowReordering: ko.observable(false)
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">allowItemReordering</div>
            <div class="dx-field-value" id="allowReorderingSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource([]);
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        },
        allowItemReordering: false
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.load();
    }, "json");
    $("#allowReorderingSelector").dxSwitch({
        value: false,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("allowItemReordering", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    autoPagingEnabled

    Deprecated

    Use the pageLoadMode option instead.

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            pullRefreshEnabled: true,
            bindingOptions: {
                autoPagingEnabled: 'autoPaging',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">autoPagingEnabled</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'autoPaging'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource({
            store: [],
            pageSize: 7
        });
        $scope.autoPaging = false;
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.pageIndex(0);
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        pullRefreshEnabled: true,
        height: '80%',
        autoPagingEnabled: autoPaging
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">autoPagingEnabled</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: autoPaging
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource({
            store: [],
            pageSize: 7
        }),
        autoPaging: ko.observable(false)
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.pageIndex(0);
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">autoPagingEnabled</div>
            <div class="dx-field-value" id="autoPagingSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource({
        store: [],
        pageSize: 7
    });
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        },
        pullRefreshEnabled: true,
        autoPagingEnabled: false
    });
    $("#autoPagingSelector").dxSwitch({
        value: false,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("autoPagingEnabled", e.value);
        }
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.pageIndex(0);
        listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }

    bounceEnabled

    A Boolean value specifying whether to enable or disable the bounce-back effect.

    Type: Boolean
    Default Value: true

    If the option is set to true, you can scroll the list content up (down) even if you have reached the bottom (top) boundary. But when you release the content, it returns to the bound position. If the option value is false, you can scroll the list content until you reach the boundary.

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            bindingOptions: {
                bounceEnabled: 'enableBounce',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">bounceEnabled</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'enableBounce'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource("/Content/data/states.txt");
        $scope.enableBounce = true;
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        bounceEnabled: enableBounce,
        height: '80%'
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">bounceEnabled</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: enableBounce
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        enableBounce: ko.observable(true)
    }
    ko.applyBindings(myViewModel);
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">bounceEnabled</div>
            <div class="dx-field-value" id="bounceSelector"></div>
        </div>
    </div>
    
    $("#myList").dxList({
        height: '80%',
        dataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#bounceSelector").dxSwitch({
        value: true,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("bounceEnabled", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    collapsibleGroups

    Specifies whether or not an end-user can collapse groups.

    Type: Boolean
    Default Value: false

    This option makes sense if the grouped option is set to true.

    If the collapsibleGroups option is set to true, the down arrow is displayed to the right of a group header. An end-user can collapse or expand a group simply clicking the group header.

    View Demo

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            grouped: true,
            bindingOptions: {
                collapsibleGroups: 'collapseGroups',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">collapsibleGroups</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'collapseGroups'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource({
            store: [],
            group: function (dataItem) {
                return dataItem.name.charAt(0);
            }
        });
        $scope.collapseGroups = true;
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
      text-align: center;
    }
    .listItem {
      text-align: left;
      padding: 5px;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        grouped: true,
        height: '80%',
        collapsibleGroups: collapseGroups
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">collapsibleGroups</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: collapseGroups
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource({
            store: [],
            group: function (dataItem) {
                return dataItem.name.charAt(0);
            }
        }),
        collapseGroups: ko.observable(true)
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
      text-align: center;
    }
    .listItem {
      text-align: left;
      padding: 5px;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">collapsibleGroups</div>
            <div class="dx-field-value" id="collapsibleSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource({
        store: [],
        group: function (dataItem) {
            return dataItem.name.charAt(0);
        }
    });
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        grouped: true,
        collapsibleGroups: true,
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#collapsibleSelector").dxSwitch({
        value: true,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("collapsibleGroups", e.value);
        }
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.load();
    }, "json");
    
    body{
      text-align: center;
    }
    .listItem {
      text-align: left;
      padding: 5px;
    }

    contentReadyAction

    Deprecated

    Use the onContentReady option instead.

    dataSource

    A data source used to fetch data to be displayed by the widget.

    Default Value: null

    You can assign an array directly to this option as well as use the Data Source provided by the DevExtreme library.

    To display widget items, a default template can be used. This template is based on the data source fields that are listed in the Default Item Template section of the widget's API. Alternatively, you can implement a custom item template.

    See Also
    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%'
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">Sort by</div>
                <div class="dx-field-value" dx-select-box="{
                    dataSource: sortConditions,
                    onValueChanged: sortConditionChanged,
                    value: 'name'
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource({
            store: [],
            sort: "name"
        });
        $scope.sortConditions = ["name", "capital"];
        $scope.sortConditionChanged = function (e) {
            $scope.listDataSource.sort(e.value);
            $scope.listDataSource.load();
        };
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '80%'
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">Sort by</div>
            <div class="dx-field-value" data-bind="dxSelectBox: { 
                dataSource: sortConditions,
                onValueChanged: sortConditionChanged,
                value: 'name'
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource({
            store: [],
            sort: "name"
        }),
        sortConditions: ["name", "capital"],
        sortConditionChanged: function (e) {
            this.listDataSource.sort(e.value);
            this.listDataSource.load();
        }
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">Sort by</div>
            <div class="dx-field-value" id="sortSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource({
        store: [],
        sort: "name"
    });
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#sortSelector").dxSelectBox({
        dataSource: ["name", "capital"],
        value: "name",
        onValueChanged: function (e) {
            listDataSource.sort(e.value);
            listDataSource.load();
        }
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }

    disabled

    A Boolean value specifying whether or not the widget can respond to user interaction.

    Type: Boolean
    Default Value: false

    Create an observable variable and assign it to this option to specify the availability of the widget at runtime.

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            bindingOptions: {
                disabled: 'disabledValue',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">disabled</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'enableActiveState'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource("/Content/data/states.txt");
        $scope.disabledValue = false;
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '80%',
        disabled: disabledValue
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">disabled</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: disabledValue
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        disabledValue: ko.observable(false)
    }
    ko.applyBindings(myViewModel);
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">disabled</div>
            <div class="dx-field-value" id="disabledSelector"></div>
        </div>
    </div>
    
    $("#myList").dxList({
        height: '80%',
        dataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#disabledSelector").dxSwitch({
        value: false,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("disabled", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    focusStateEnabled

    Specifies whether or not the widget can be focused.

    Type: Boolean
    Default Value: false

    grouped

    A Boolean value specifying whether or not to display a grouped list.

    Type: Boolean
    Default Value: false

    If this option is set to 'true', the object assigned to the items option should include the key and items properties. The key property specifies the group caption in the list. The items property represents an array listing the group items.

    View Demo

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div id="myList" dx-list="{
            dataSource: listDataSource,
            height: '80%',
            grouped: true
        }">
            <div class="listItem" data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">grouped</div>
                <div class="dx-field-value" dx-switch="{
                    value: true,
                    onValueChanged: groupedValueChanged
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource({
            store: [],
            group: function (dataItem) {
                return dataItem.name.charAt(0);
            }
        });
        $scope.groupedValueChanged = function (e) {
            var myList = $("#myList").dxList("instance");
            myList.beginUpdate();
            if (e.value)
                $scope.listDataSource.group(function (dataItem) {
                    return dataItem.name.charAt(0);
                });
            else
                $scope.listDataSource.group(null);
            myList.option("grouped", e.value);
            $scope.listDataSource.load().done(function () {
                myList.endUpdate();
            });
        };
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div id="myList" data-bind="dxList: {
        dataSource: listDataSource,
        height: '80%',
        grouped: 'true'
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">grouped</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: true,
                onValueChanged: groupedValueChanged
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource({
            store: [],
            group: function (dataItem) {
                return dataItem.name.charAt(0);
            }
        }),
        groupedValueChanged: function (e) {
            var myList = $("#myList").dxList("instance");
            myList.beginUpdate();
            if (e.value)
                this.listDataSource.group(function (dataItem) {
                    return dataItem.name.charAt(0);
                });
            else
                this.listDataSource.group(null);
            myList.option("grouped", e.value);
            this.listDataSource.load().done(function () {
                myList.endUpdate();
            });
        }
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">grouped</div>
            <div class="dx-field-value" id="groupedSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource({
        store: [],
        group: function (dataItem) {
            return dataItem.name.charAt(0);
        }
    });
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        grouped: true,
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#groupedSelector").dxSwitch({
        value: true,
        onValueChanged: function (e) {
            var myList = $("#myList").dxList("instance");
            myList.beginUpdate();
            if (e.value)
                listDataSource.group(function (dataItem) {
                    return dataItem.name.charAt(0);
                });
            else
                listDataSource.group(null);
            myList.option("grouped", e.value);
            listDataSource.load().done(function () {
                myList.endUpdate();
            });
        }
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }

    groupRender

    Deprecated

    Use the groupTemplate option instead.

    groupTemplate

    The template to be used for rendering item groups.

    Type: String|function|DOM Node|jQuery
    Function parameters:
    groupData: Object
    The group object to be rendered.
    groupIndex: Number
    The index of the group to be rendered.
    groupElement: Object
    An HTML element of the group to be rendered.
    Return Value: String|jQuery
    A template name or a template container.
    Default Value: "group"

    NOTE: A binding context of a group template is the data source object that corresponds to the currently rendered group. So, you can bind template elements to the group object's fields directly (see the code above). To access another binding context within a group template, use the Knockout/Angular binding variables.

    View Demo

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            grouped: true,
            height: '80%',
            bindingOptions: {
                groupTemplate: 'currentTemplate'
            }
        }">
            <div data-options="dxTemplate:{ name:'full' }">
                <span style="color:red; font-size:larger;">{{key + '&nbsp;'}}</span>{{boundaryItems}}
            </div>
            <div data-options="dxTemplate:{ name:'brief' }">
                <h1 style="color:blue; text-align: left;">{{key}}</h1>
            </div>
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label" style="width: 60%">groupTemplate</div>
                <div class="dx-field-value" style="width: 40%" dx-select-box="{
                    dataSource: groupTemplates,
                    bindingOptions: {
                        value: 'currentTemplate'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource({
            store: [],
            group: function (dataItem) {
                return dataItem.name.charAt(0);
            },
            postProcess: function (items) {
                for (var i = 0; i < items.length; i++)
                    if (items[i].items.length > 1)
                        items[i].boundaryItems = items[i].items[0].name + " - " + items[i].items[items[i].items.length - 1].name;
                    else
                        items[i].boundaryItems = items[i].items[0].name;
                return items;
            }
        });
        $scope.groupTemplates = ["brief", "full"];
        $scope.currentTemplate = "brief";
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        grouped: true,
        height: '80%',
        groupTemplate: currentTemplate
    }">
        <div data-options="dxTemplate:{ name:'full' }">
            <span style="color:red; font-size:larger;" data-bind="text: key + '&nbsp;'"></span>
            <span data-bind="text: boundaryItems"></span>
        </div>
        <div data-options="dxTemplate:{ name:'brief' }">
            <h1 style="color:blue; text-align: left;" data-bind="text: key"></h1>
        </div>
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label" style="width: 60%">groupTemplate</div>
            <div class="dx-field-value" style="width: 40%" data-bind="dxSelectBox: { 
                dataSource: groupTemplates,
                value: currentTemplate
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource({
            store: [],
            group: function (dataItem) {
                return dataItem.name.charAt(0);
            },
            postProcess: function (items) {
                for (var i = 0; i < items.length; i++)
                    if (items[i].items.length > 1)
                        items[i].boundaryItems = items[i].items[0].name + " - " + items[i].items[items[i].items.length - 1].name;
                    else
                        items[i].boundaryItems = items[i].items[0].name;
                return items;
            }
        }),
        groupTemplates: ["brief", "full"],
        currentTemplate: ko.observable("brief")
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">groupTemplate</div>
            <div class="dx-field-value" id="templateSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource({
        store: [],
        group: function (dataItem) {
            return dataItem.name.charAt(0);
        },
        postProcess: function (items) {
            for (var i = 0; i < items.length; i++)
                if (items[i].items.length > 1)
                    items[i].boundaryItems = items[i].items[0].name + " - " + items[i].items[items[i].items.length - 1].name;
                else
                    items[i].boundaryItems = items[i].items[0].name;
            return items;
        }
    });
    var briefTemplate = function (groupData, groupIndex, groupElement) {
        groupElement.append("<h1 style=\"color:blue; text-align: left;\">"+ groupData.key + "</h1>");
    };
    var fullTemplate = function (groupData, groupIndex, groupElement) {
        groupElement.append("<span style=\"color:red; font-size:larger;\">" + groupData.key + "&nbsp;</span>" + groupData.boundaryItems);
    };
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        grouped: true,
        groupTemplate: briefTemplate,
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#templateSelector").dxSelectBox({
        dataSource: ["brief", "full"],
        value: "brief",
        onValueChanged: function (e) {
            var list = $("#myList").dxList("instance");
            list.option("groupTemplate", e.value == "brief" ? briefTemplate : fullTemplate);
        }
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }

    height

    Specifies the height of the widget.

    Type: Number|String|function
    Return Value: Number|String
    The widget height.
    Default Value: undefined

    The option can hold a value of the following types.

    • number
      The height of the widget in pixels

    • string
      A CSS measurement of the widget height (e.g., "55px", "80%", "auto" and "inherit")

    • function
      A function returning the widget height (e.g., height:function(){ return baseHeight - 10 + "%"; })

    hint

    Specifies the text of the hint displayed for the widget.

    Type: String
    Default Value: undefined

    hoverStateEnabled

    A Boolean value specifying whether or not the widget changes its state when being hovered by an end user.

    Type: Boolean
    Default Value: false

    indicateLoading

    Specifies whether or not to show the loading panel when the DataSource bound to the widget is loading data.

    Type: Boolean
    Default Value: true

    NOTE: This option affects only the load panel displayed when the bound DataSource is loading data after the load() method is called. The load indicator displayed when the list is being updated is always enabled regardless of the option value.

    itemClickAction

    Deprecated

    Use the onItemClick option instead.

    itemDeleteAction

    Deprecated

    Use the onItemDeleted option instead.

    itemDeleteMode

    Specifies the way a user can delete items from the list.

    Type: String
    Default Value: 'toggle'
    Default for ios7: 'slideItem'
    Default for android: 'swipe'
    Default for windows 8: 'context'
    Default for generic: 'static'
    Accepted Values: 'static'|'toggle'|'slideButton'|'slideItem'|'swipe'|'context'

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            editEnabled: true,
            height: '80%',
            allowItemDeleting: true,
            bindingOptions: {
                itemDeleteMode: 'deleteMode'
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">itemDeleteMode</div>
                <div class="dx-field-value" dx-select-box="{
                    dataSource: deleteModes,
                    bindingOptions: {
                        value: 'deleteMode'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource([]);
        $scope.deleteModes = ["static", "toggle", "slideButton", "slideItem", "swipe", "context"];
        $scope.deleteMode = "slideButton";
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        editEnabled: true,
        height: '80%',
        allowItemDeleting: true,
        itemDeleteMode: deleteMode
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">itemDeleteMode</div>
            <div class="dx-field-value" data-bind="dxSelectBox: {
                dataSource: deleteModes,
                value: deleteMode
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource([]),
        deleteModes: ["static", "toggle", "slideButton", "slideItem", "swipe", "context"],
        deleteMode: ko.observable("slideButton")
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">itemDeleteMode</div>
            <div class="dx-field-value" id="deleteModeSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource([]);
    $("#myList").dxList({
        editEnabled: true,
        height: '80%',
        dataSource: listDataSource,
        allowItemDeleting: true,
        itemDeleteMode: "slideButton",
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.load();
    }, "json");
    $("#deleteModeSelector").dxSelectBox({
        dataSource: ["static", "toggle", "slideButton", "slideItem", "swipe", "context"],
        value: "slideButton",
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("itemDeleteMode", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    itemHoldAction

    Deprecated

    Use the onItemHold option instead.

    itemHoldTimeout

    The time period in milliseconds before the onItemHold event is raised.

    Type: Number
    Default Value: 750

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <p class="hint"><b>Hold a list item</b></p>
        <div dx-list="{
            dataSource: listDataSource,
            height: '70%',
            onItemHold: itemHeld,
            bindingOptions: {
                itemHoldTimeout: 'holdTimeout'
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label" style="width: 60%;">itemHoldTimeout</div>
                <div class="dx-field-value" style="width: 40%;" dx-number-box="{
                    min: 250,
                    max: 2000,
                    step: 50,
                    showSpinButtons: true,
                    bindingOptions: {
                        value: 'holdTimeout'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource("/Content/data/states.txt");
        $scope.holdTimeout = 750;
        $scope.itemHeld = function (e) {
            DevExpress.ui.notify("The \"" + e.itemData.name + "\" item is being held during " + $scope.holdTimeout / 1000 + " sec", "success", 2000);
        };
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    .hint{
        padding: 10px;
        border-bottom: 1px solid red;
        color: blue;
        background-color: #ffe;
        font-size: large;
    }
    <p class="hint"><b>Hold a list item</b></p>
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '70%',
        onItemHold: itemHeld,
        itemHoldTimeout: holdTimeout
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label" style="width: 60%;">itemHoldTimeout</div>
            <div class="dx-field-value" style="width: 40%;" data-bind="dxNumberBox: {
                min: 250,
                max: 2000,
                step: 50,
                showSpinButtons: true,
                value: holdTimeout
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        holdTimeout: ko.observable(750),
        itemHeld: function (e) {
            DevExpress.ui.notify("The \"" + e.itemData.name + "\" item is being held during " + this.holdTimeout() / 1000 + " sec", "success", 2000);
        }
    }
    ko.applyBindings(myViewModel);
    
    body{
        text-align: center;
    }
    .hint{
        padding: 10px;
        border-bottom: 1px solid red;
        color: blue;
        background-color: #ffe;
        font-size: large;
    }
    <p class="hint"><b>Hold a list item</b></p>
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label" style="width: 60%;">itemHoldTimeout</div>
            <div class="dx-field-value" style="width: 40%;" id="timeoutSelector"></div>
        </div>
    </div>
    
    $("#myList").dxList({
        height: '70%',
        dataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        },
        onItemHold: function (e) {
            var holdTimeout = $("#myList").dxList("instance").option("itemHoldTimeout");
            DevExpress.ui.notify("The \"" + e.itemData.name + "\" item is being held during " + holdTimeout / 1000 + " sec", "success", 2000);
        }
    });
    $("#timeoutSelector").dxNumberBox({
        min: 250,
        max: 2000,
        step: 50,
        showSpinButtons: true,
        value: 750,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("itemHoldTimeout", e.value);
        }
    });
    
    body{
        text-align: center;
    }
    .hint{
        padding: 10px;
        border-bottom: 1px solid red;
        color: blue;
        background-color: #ffe;
        font-size: large;
    }

    itemRender

    Deprecated

    Use the itemTemplate option instead.

    itemRenderedAction

    Deprecated

    Use the onItemRendered option instead.

    itemReorderAction

    Deprecated

    Use the onItemReordered option instead.

    items

    An array of items displayed by the widget.

    Type: Array

    You can use the dataSource option instead. Unlike the items option, the dataSource option can take on the DataSource configuration object as well as a simple array.

    To display widget items, a default template can be used. This template is based on the data source fields that are listed in the Default Item Template section of the widget's API. Alternatively, you can implement a custom item template.

    See Also

    itemSelectAction

    Deprecated

    Use the onSelectionChanged option instead.

    A function performed when a widget item is selected.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    itemData: Object
    The data that is bound to the selected item.
    itemElement: jQuery
    An HTML element representing the item.
    itemIndex: Number
    Specifies the index of the just selected item.
    Default Value: null

    Assign a function to perform a custom action when a widget item is selected.

    Alternatively, you can assign a URL to which the browser will navigate when a widget item is selected.

    itemSwipeAction

    Deprecated

    Use the onItemSwipe option instead.

    itemTemplate

    The template to be used for rendering items.

    Type: String|function|DOM Node|jQuery
    Function parameters:
    itemData: Object
    The item object to be rendered.
    itemIndex: Number
    The index of the item to be rendered.
    itemElement: jQuery
    An HTML element of the item to be rendered.
    Return Value: String|DOM Node|jQuery
    A template name or a template container.
    Default Value: "item"
    See Also

    NOTE: A binding context of an item template is the data source object that corresponds to the currently rendered item. So, you can bind template elements to the item object's fields directly (see the code above). To access another binding context within an item template, use Knockout/Angular binding variables.

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            bindingOptions: {
                itemTemplate: 'currentTemplate'
            }
        }">
            <div data-options="dxTemplate:{ name:'brief' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
            <div style="text-align: left;" data-options="dxTemplate:{ name:'full' }">
                <div style="display:inline-block; margin: 5px;">
                    <img style="margin:5px;" ng-attr-src="{{imagePath}}" />
                </div>
                <div style="display:inline-block; margin: 5px;">
                    <p style="font-size:larger;"><b>{{name}}</b></p>
                    <p>Capital: <i>{{capital}}</i></p>
                </div>
                <p>Area: <i>{{area}}</i> km2</p>
                <p>Population: <i>{{population}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label" style="width: 60%">itemTemplate</div>
                <div class="dx-field-value" style="width: 40%" dx-select-box="{
                    dataSource: itemTemplates,
                    bindingOptions: {
                        value: 'currentTemplate'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource({
            store: [],
            map: function (itemData) {
                itemData.imagePath = "/Content/images/doc/15_1/PhoneJS/flags/" + itemData.name.replace(" ", "") + ".gif";
                return itemData;
            }
        });
        $scope.itemTemplates = ["brief", "full"];
        $scope.currentTemplate = "brief";
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
      text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '80%',
        itemTemplate: currentTemplate
    }">
        <div data-options="dxTemplate:{ name:'brief' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
        <div style="text-align: left;" data-options="dxTemplate:{ name:'full' }">
            <div style="display:inline-block; margin: 5px;">
                <img style="margin:5px;" data-bind="attr: { src: imagePath }" />
            </div>
            <div style="display:inline-block; margin: 5px;">
                <p style="font-size:larger;"><b data-bind="text: name"></b></p>
                <p>Capital: <i data-bind="text: capital"></i></p>
            </div>
            <p>Area: <i data-bind="text: area"></i> km2</p>
            <p>Population: <i data-bind="text: population"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label" style="width: 60%">itemTemplate</div>
            <div class="dx-field-value" style="width: 40%" data-bind="dxSelectBox: { 
                dataSource: itemTemplates,
                value: currentTemplate
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource({
            store: [],
            map: function (itemData) {
                itemData.imagePath = "/Content/images/doc/15_1/PhoneJS/flags/" + itemData.name.replace(" ", "") + ".gif";
                return itemData;
            }
        }),
        itemTemplates: ["brief", "full"],
        currentTemplate: ko.observable("brief")
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
      text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">itemTemplate</div>
            <div class="dx-field-value" id="templateSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource({
        store: [],
        map: function (itemData) {
            itemData.imagePath = "/Content/images/doc/15_1/PhoneJS/flags/" + itemData.name.replace(" ", "") + ".gif";
            return itemData;
        }
    });
    var briefTemplate = function (itemData, itemIndex, itemElement) {
        itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
        itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
    };
    var fullTemplate = function (itemData, itemIndex, itemElement) {
        itemElement.css("text-align", "left");
        var leftBlock = $("<div style='display:inline-block; margin: 5px;'>");
        leftBlock.append("<img style='margin:5px;' src='" + itemData.imagePath + "' />");
        itemElement.append(leftBlock);
        var rightBlock = $("<div style='display:inline-block; margin: 5px;'>");
        rightBlock.append("<p style='font-size:larger;'><b>" + itemData.name + "</b></p>");
        rightBlock.append("<p><i>" + itemData.capital + "</i></p>");
        itemElement.append(rightBlock);
        itemElement.append("<p>Area: <i>" + itemData.area + "</i> km2</p>");
        itemElement.append("<p>Population: <i>" + itemData.population + "</i> km2</p>");
    };
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        itemTemplate: briefTemplate
    });
    $("#templateSelector").dxSelectBox({
        dataSource: ["brief", "full"],
        value: "brief",
        onValueChanged: function (e) {
            var list = $("#myList").dxList("instance");
            list.option("itemTemplate", e.value == "brief" ? briefTemplate : fullTemplate);
        }
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.load();
    }, "json");
    
    body{
      text-align: center;
    }

    itemUnselectAction

    Deprecated

    Use the onSelectionChanged option instead.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    itemData: Object
    The data that is bound to the unselected item.
    itemElement: jQuery
    An HTML element of the item.
    itemIndex: Number
    Specifies the index of the item being unselected. In a grouped list, the index is the object with group and item indexes: { group: 0, item: 0 }.
    Default Value: null

    menuItems

    Specifies the array of items for a context menu called for a list item.

    Type: Array
    Default Value: []

    Each item of the array passed to this option should include the text and action properties. The text property specifies the menu item text. The action property takes on a function called when the item is clicked. The function passed to the action property has the following parameters.

    • itemElement - specifies the current item element
    • itemData - specifies the current item data object

    menuMode

    Specifies whether an item context menu is shown when a user holds or swipes an item.

    Type: String
    Default Value: 'context'
    Default for ios7: 'slide'
    Accepted Values: 'context'|'slide'

    nextButtonText

    The text displayed on the button used to load the next page from the data source.

    Type: String
    Default Value: "More"

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div id="myList" dx-list="{
            height: '80%',
            dataSource: listDataSource,
            autoPagingEnabled: false,
            pullRefreshEnabled: true,
            showNextButton: true,
            bindingOptions: {
                nextButtonText: 'nextText',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">nextButtonText</div>
                <div class="dx-field-value" dx-text-box="{
                    bindingOptions: {
                        value: 'nextText'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource({
            store: [],
            pageSize: 5
        });
        $scope.nextText = "More";
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.pageIndex(0);
            $scope.listDataSource.load().done(function () {
                $("#myList").dxList("instance").reload();
            });
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div id="myList" data-bind="dxList: {
        height: '80%',
        dataSource: listDataSource,
        autoPagingEnabled: false,
        pullRefreshEnabled: true,
        showNextButton: true,
        nextButtonText: nextText
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">nextButtonText</div>
            <div class="dx-field-value" data-bind="dxTextBox: { 
                value: nextText
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource({
            store: [],
            pageSize: 5
        }),
        nextText: ko.observable("More")
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.pageIndex(0);
        myViewModel.listDataSource.load().done(function () {
            $("#myList").dxList("instance").reload();
        });
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">nextButtonText</div>
            <div class="dx-field-value" id="textField"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource({
        store: [],
        pageSize: 5
    });
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        pullRefreshEnabled: true,
        autoPagingEnabled: false,
        showNextButton: true,
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#textField").dxTextBox({
        value: "More",
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("nextButtonText", e.value);
        }
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.pageIndex(0);
        listDataSource.load().done(function () {
            $("#myList").dxList("instance").reload();
        });
    }, "json");
    
    body{
        text-align: center;
    }

    noDataText

    The text or HTML markup displayed by the widget if the item collection is empty.

    Type: String
    Default Value: "No data to display"

    onContentReady

    A handler for the contentReady event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    Default Value: null

    Assign a function to perform a custom action when widget content is ready.

    onDisposing

    A handler for the disposing event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    Default Value: null

    onGroupRendered

    A handler for the groupRendered event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    groupData: Object
    The data that is bound to the group item.
    groupElement: jQuery
    An HTML element of the group.
    groupIndex: Number
    Specifies the index of the rendered group.
    Default Value: null

    Assign a function to perform a custom action after an item group element is rendered.

    onInitialized

    A handler for the initialized event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    Default Value: null

    Assign a function to perform a custom action when the widget is initialized.

    onItemClick

    A handler for the itemClick event.

    Type: function|String
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    itemData: Object
    The data that is bound to the clicked item.
    itemElement: jQuery
    An HTML element of the item.
    itemIndex: Number|Object
    Specifies the index of the clicked item. In a grouped list, the index represents an object defining group and item indexes: { group: 0, item: 0 }.
    Default Value: null

    Assign a function to perform a custom action when a widget item is clicked.

    To navigate to a specific URL when the itemClick event fires, assign that URL directly to this option.

    onItemContextMenu

    A handler for the itemContextMenu event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    itemData: Object
    The data that is bound to the item.
    itemElement: jQuery
    An HTML element of the item.
    itemIndex: Number|Object
    Specifies an index of the item for which the context menu is displayed. In a grouped list, the index is specified as an object defining group and item indexes: { group: 0, item: 0 }.
    jQueryEvent: jQuery.Event
    Specifies the jQuery event that caused action execution.
    Default Value: null

    Assign a function to perform a custom action when the right mouse button is clicked when the pointer is over a widget item, or when the "sustained" (also known as a long press) touch action is performed.

    onItemDeleted

    A handler for the itemDeleted event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    itemData: Object
    The data that is bound to the removed item.
    itemElement: jQuery
    An HTML element of the item.
    itemIndex: Number|Object
    Specifies the index of the item being deleted. In a grouped list, the index represents an object defining the group and item indexes: { group: 0, item: 0 }.
    Default Value: null

    Assign a function to perform a custom action when a list item is deleted.

    Note that the itemDeleted event is raised only if an item is deleted using the appropriate method of the widget or end-user interaction. If you delete an item from an observable array passed to the dataSource or items option, the widget entirely reloads the items array without raising the itemDeleted and itemDeleting events.

    onItemDeleting

    A handler for the itemDeleting event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    itemData: Object
    The data that is bound to the clicked item.
    itemElement: jQuery
    An HTML element of the item.
    itemIndex: Number|Object
    Specifies the index of the item. In a grouped list, the index represents an object defining group and item indexes: { group: 0, item: 0 }.
    Return Value: jQuery.Promise
    A Promise of the jQuery Deferred object resolved if the item deletion is confirmed and rejected if deletion is canceled.
    Default Value: null

    You can use this option to add a confirmation dialog displayed when a widget item is deleted.

    JavaScript
    var widgetOptions = {
        onItemDeleting: function(e) {
            return DevExpress.ui.dialog.confirm("Do you really want to delete the item?");
        })
    }

    Assign a function to perform a custom action before a collection item is deleted.

    Note that the itemDeleting event is raised only if an item is being deleted using the appropriate method of the widget or end-user interaction. If you delete an item from an observable array passed to the dataSource or items option, the widget entirely reloads the items array without raising the itemDeleted and itemDeleting events.

    onItemHold

    A handler for the itemHold event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    itemData: Object
    The data that is bound to the item being held.
    itemElement: jQuery
    An HTML element of the item.
    itemIndex: Number|Object
    The index of the item being held. In a grouped list, the index represents an object defining the group and item indexes: { group: 0, item: 0 }.
    Default Value: null

    Assign a function to perform a custom action when the widget's collection item is being held for a specified time period (see the itemHoldTimeout option).

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <p class="hint"><b>Hold a list item</b></p>
        <div dx-list="{
            dataSource: listDataSource,
            height: '70%',
            onItemHold: itemHeld,
            bindingOptions: {
                itemHoldTimeout: 'holdTimeout'
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label" style="width: 60%;">itemHoldTimeout</div>
                <div class="dx-field-value" style="width: 40%;" dx-number-box="{
                    min: 250,
                    max: 2000,
                    step: 50,
                    showSpinButtons: true,
                    bindingOptions: {
                        value: 'holdTimeout'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource("/Content/data/states.txt");
        $scope.holdTimeout = 750;
        $scope.itemHeld = function (e) {
            DevExpress.ui.notify("The \"" + e.itemData.name + "\" item is being held during " + $scope.holdTimeout / 1000 + " sec", "success", 2000);
        };
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    .hint{
        padding: 10px;
        border-bottom: 1px solid red;
        color: blue;
        background-color: #ffe;
        font-size: large;
    }
    <p class="hint"><b>Hold a list item</b></p>
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '70%',
        onItemHold: itemHeld,
        itemHoldTimeout: holdTimeout
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label" style="width: 60%;">itemHoldTimeout</div>
            <div class="dx-field-value" style="width: 40%;" data-bind="dxNumberBox: {
                min: 250,
                max: 2000,
                step: 50,
                showSpinButtons: true,
                value: holdTimeout
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        holdTimeout: ko.observable(750),
        itemHeld: function (e) {
            DevExpress.ui.notify("The \"" + e.itemData.name + "\" item is being held during " + this.holdTimeout() / 1000 + " sec", "success", 2000);
        }
    }
    ko.applyBindings(myViewModel);
    
    body{
        text-align: center;
    }
    .hint{
        padding: 10px;
        border-bottom: 1px solid red;
        color: blue;
        background-color: #ffe;
        font-size: large;
    }
    <p class="hint"><b>Hold a list item</b></p>
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label" style="width: 60%;">itemHoldTimeout</div>
            <div class="dx-field-value" style="width: 40%;" id="timeoutSelector"></div>
        </div>
    </div>
    
    $("#myList").dxList({
        height: '70%',
        dataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        },
        onItemHold: function (e) {
            var holdTimeout = $("#myList").dxList("instance").option("itemHoldTimeout");
            DevExpress.ui.notify("The \"" + e.itemData.name + "\" item is being held during " + holdTimeout / 1000 + " sec", "success", 2000);
        }
    });
    $("#timeoutSelector").dxNumberBox({
        min: 250,
        max: 2000,
        step: 50,
        showSpinButtons: true,
        value: 750,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("itemHoldTimeout", e.value);
        }
    });
    
    body{
        text-align: center;
    }
    .hint{
        padding: 10px;
        border-bottom: 1px solid red;
        color: blue;
        background-color: #ffe;
        font-size: large;
    }

    onItemRendered

    A handler for the itemRendered event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data available for binding against the element. Available only in the Knockout and AngularJS approaches.
    itemData: Object
    The data that is bound to the item to be rendered.
    itemElement: jQuery
    An HTML element of the item.
    itemIndex: Number
    Specifies the index of the rendered item.
    Default Value: null

    Assign a function to perform a custom action after a collection item is rendered.

    onItemReordered

    A handler for the itemReordered event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    itemData: Object
    The data that is bound to the reordered item.
    itemElement: jQuery
    An HTML element of the item.
    itemIndex: Number|Object
    Specifies the current index of the item after reordering. In a grouped list, the index represents an object defining the group and item indexes: { group: 0, item: 0 }. This field holds the same value as toIndex.
    fromIndex: Number
    Specifies the previous index of the item. In a grouped list, the index represents an object defining the group and item indexes: { group: 0, item: 0 }.
    toIndex: Number
    Specifies the current index of the item. In a grouped list, the index represents an object defining the group and item indexes: { group: 0, item: 0 }.
    Default Value: null

    Assign a function to perform a custom action when a list item is moved to another position.

    onItemSwipe

    A handler for the itemSwipe event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    jQueryEvent: jQuery.Event
    Specifies the jQuery event that caused action execution.
    itemData: Object
    The data that is bound to the swiped item.
    itemElement: jQuery
    An HTML element of the item.
    itemIndex: Number|Object
    The index of the swiped items. In a grouped list, the index represents an object defining the group and item indexes: { group: 0, item: 0 }.
    direction: String
    Specifies whether the swipe operation is performed in the left or right direction.
    Default Value: null

    Assign a function to perform a custom action when an item is swiped.

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <p class="hint"><b>Swipe a list item</b></p>
        <div dx-list="{
            dataSource: listDataSource,
            onItemSwipe: itemSwiped
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource("/Content/data/states.txt");
        $scope.itemSwiped = function (e) {
            DevExpress.ui.notify("The \"" + e.itemData.name + "\" item is swiped", "success", 1500);
        };
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    .hint{
        padding: 10px;
        border-bottom: 1px solid red;
        color: blue;
        background-color: #ffe;
        font-size: large;
    }
    <p class="hint"><b>Swipe a list item</b></p>
    <div data-bind="dxList: {
        dataSource: listDataSource,
        onItemSwipe: itemSwiped
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemSwiped: function (e) {
            DevExpress.ui.notify("The \"" + e.itemData.name + "\" item is swiped", "success", 1500);
        }
    }
    ko.applyBindings(myViewModel);
    
    body{
        text-align: center;
    }
    .hint{
        padding: 10px;
        border-bottom: 1px solid red;
        color: blue;
        background-color: #ffe;
        font-size: large;
    }
    <p class="hint"><b>Swipe a list item</b></p>
    <div id="myList"></div>
    
    $("#myList").dxList({
        dataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        },
        onItemSwipe: function (e) {
            DevExpress.ui.notify("The \"" + e.itemData.name + "\" item is swiped", "success", 1500);
        }
    });
    
    body{
        text-align: center;
    }
    .hint{
        padding: 10px;
        border-bottom: 1px solid red;
        color: blue;
        background-color: #ffe;
        font-size: large;
    }

    onOptionChanged

    A handler for the optionChanged event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    name: String
    Specifies the name of the option whose value is changed.
    fullName: String
    Specifies a full name of the option whose value is changed. The full name is formed by concatenating the names of the options that are presented in the hierarchy of the given option. The names are delimited by commas.
    value: any
    Specifies a new value for the option.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    Default Value: null

    Assign a function to perform a custom action after an option of the component is changed.

    onPageLoading

    A handler for the pageLoading event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    Default Value: null

    Assign a function to perform a custom action before loading the next page when autopaging is enabled.

    onPullRefresh

    A handler for the pullRefresh event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    Default Value: null

    Assign a function to perform a custom action before the list is refreshed as a result of the "pull down to refresh" gesture.

    onScroll

    A handler for the scroll event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    jQueryEvent: jQuery.Event
    Specifies the jQuery event that caused action execution.
    scrollOffset: Object
    Specifies the current scroll offset in the following format { top: topOffset, left: leftOffset }.
    reachedLeft: Boolean
    Indicates whether the container's left boundary is reached.
    reachedRight: Boolean
    Indicates whether the container's right boundary is reached.
    reachedTop: Boolean
    Indicates whether the container's top boundary is reached.
    reachedBottom: Boolean
    Indicates whether the container's bottom boundary is reached.
    Default Value: null

    Assign a function to perform a custom action on each scroll gesture.

    onSelectionChanged

    A handler for the selectionChanged event.

    Type: function
    Function parameters:
    e: Object
    Provides function parameters.
    Object structure:
    component: Object
    Provides access to the widget instance.
    element: jQuery
    An HTML element of the widget.
    model: Object
    Provides access to the data that is available for binding against the element. Available only in the Knockout and AngularJS approaches.
    addedItems: Array
    An array of items added to selection.
    removedItems: Array
    An array of items removed from selection.
    Default Value: null

    Assign a function to perform a custom action after a collection item is selected or unselected.

    pageLoadingAction

    Deprecated

    Use the onPageLoading option instead.

    pageLoadingText

    Specifies the text shown in the pullDown panel, which is displayed when the list is scrolled to the bottom.

    Type: String
    Default Value: "Loading..."

    pageLoadMode

    Specifies whether the next page is loaded when a user scrolls the widget to the bottom or when the "next" button is clicked.

    Type: String
    Default Value: "scrollBottom"
    Accepted Values: 'scrollBottom'|'nextButton'

    pulledDownText

    Specifies the text displayed in the pullDown panel when the list is pulled below the refresh threshold.

    Type: String
    Default Value: "Release to refresh..."

    pullingDownText

    Specifies the text shown in the pullDown panel while the list is being pulled down to the refresh threshold.

    Type: String
    Default Value: "Pull down to refresh..."

    pullRefreshAction

    Deprecated

    Use the onPullRefresh option instead.

    pullRefreshEnabled

    A Boolean value specifying whether or not the widget supports the "pull down to refresh" gesture.

    Type: Boolean
    Default Value: false

    If the option is set to true, list data is refreshed each time you pull down and release list contents.

    NOTE: The "pull down to refresh" gesture is not supported by desktop browsers and Windows Phone devices. You can use it only in mobile themes except the Windows Phone theme.

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            bindingOptions: {
                pullRefreshEnabled: 'pullRefresh',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">pullRefreshEnabled</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'pullRefresh'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource({
            store: [],
            pageSize: 7
        });
        $scope.pullRefresh = false;
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.pageIndex(0);
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '80%',
        pullRefreshEnabled: pullRefresh
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">pullRefreshEnabled</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: pullRefresh
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource({
            store: [],
            pageSize: 7
        }),
        pullRefresh: ko.observable(false)
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.pageIndex(0);
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">pullRefreshEnabled</div>
            <div class="dx-field-value" id="pullRefreshSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource({
        store: [],
        pageSize: 7
    });
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        },
        pullRefreshEnabled: false
    });
    $("#pullRefreshSelector").dxSwitch({
        value: false,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("pullRefreshEnabled", e.value);
        }
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.pageIndex(0);
        listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }

    refreshingText

    Specifies the text displayed in the pullDown panel while the list is being refreshed.

    Type: String
    Default Value: "Refreshing..."

    rtlEnabled

    Specifies whether or not the current component supports a right-to-left representation.

    Type: Boolean
    Default Value: false

    If you need to switch the display of this DevExtreme component to right-to-left, enable a specifically designed configuration option - rtlEnabled. When this option is set to true, the text flows from right to left, and the layout the component's elements is reversed. To switch the entire application/site to a right-to-left representation, use the static DevExpress.rtlEnabled field.

    scrollAction

    Deprecated

    Use the onScroll option instead.

    scrollByContent

    A Boolean value specifying if the list is scrolled by content.

    Type: Boolean
    Default Value: true

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            bindingOptions: {
                scrollByContent: 'contentScrolling',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">scrollByContent</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'contentScrolling'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource("/Content/data/states.txt");
        $scope.contentScrolling = true;
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        scrollByContent: contentScrolling,
        height: '80%'
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">scrollByContent</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: contentScrolling
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        contentScrolling: ko.observable(true)
    }
    ko.applyBindings(myViewModel);
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">scrollByContent</div>
            <div class="dx-field-value" id="scrollSelector"></div>
        </div>
    </div>
    
    $("#myList").dxList({
        height: '80%',
        dataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#scrollSelector").dxSwitch({
        value: true,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("scrollByContent", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    scrollByThumb

    A Boolean value specifying if the list is scrolled using the scrollbar.

    Type: Boolean
    Default Value: false

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            bindingOptions: {
                scrollByThumb: 'thumbScrolling',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">scrollByThumb</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'thumbScrolling'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource("/Content/data/states.txt");
        $scope.thumbScrolling = false;
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        scrollByThumb: thumbScrolling,
        height: '80%'
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">scrollByThumb</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: thumbScrolling
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        thumbScrolling: ko.observable(false)
    }
    ko.applyBindings(myViewModel);
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">scrollByThumb</div>
            <div class="dx-field-value" id="scrollSelector"></div>
        </div>
    </div>
    
    $("#myList").dxList({
        height: '80%',
        dataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#scrollSelector").dxSwitch({
        value: false,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("scrollByThumb", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    scrollingEnabled

    A Boolean value specifying whether to enable or disable list scrolling.

    Type: Boolean
    Default Value: true

    selectedItems

    An array of currently selected item objects.

    Type: Array

    selectionMode

    Specifies item selection mode.

    Type: String
    Default Value: 'none'
    Accepted Values: 'none'|'multi'|'single'|'all'

    The option accepts the following values.

    • 'none'
      Selection is disabled.

    • 'single'
      A user can select only a single item.

    • 'multi'
      A user can select several items.

    • 'all'
      The multi mode with a check box that selects/unselects all items.

    showNextButton

    Deprecated

    Use the pageLoadMode option instead.

    showScrollbar

    Specifies when the widget shows the scrollbar.

    Type: String
    Default Value: 'onScroll'
    Accepted Values: 'onScroll'|'onHover'|'always'|'never'

    Setting this option makes sense only when the useNativeScrolling option is set to false.

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            bindingOptions: {
                showScrollbar: 'showScrollbar',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">showScrollbar</div>
                <div class="dx-field-value" dx-select-box="{
                    dataSource: availableValues,
                    bindingOptions: {
                        value: 'showScrollbar'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource("/Content/data/states.txt");
        $scope.availableValues = ["always", "onHover", "onScroll", "never"];
        $scope.showScrollbar = "onScroll";
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '80%',
        showScrollbar: showScrollbar
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">showScrollbar</div>
            <div class="dx-field-value" data-bind="dxSelectBox: { 
                dataSource: availableValues,
                value: showScrollbar
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        availableValues: ["always", "onHover", "onScroll", "never"],
        showScrollbar: ko.observable("onScroll")
    }
    ko.applyBindings(myViewModel);
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">showScrollbar</div>
            <div class="dx-field-value" id="showScrollbarSelector"></div>
        </div>
    </div>
    
    $("#myList").dxList({
        height: '80%',
        dataSource: new DevExpress.data.DataSource("/Content/data/states.txt"),
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        }
    });
    $("#showScrollbarSelector").dxSelectBox({
        dataSource: ["always", "onHover", "onScroll", "never"],
        value: "onScroll",
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("showScrollbar", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    showSelectionControls

    Specifies whether or not to display controls used to select list items.

    Type: Boolean
    Default Value: false

    Show Example:
    AngularJS
    Knockout
    jQuery
    <div ng-controller="demoController" style="height: 100%;">
        <div dx-list="{
            dataSource: listDataSource,
            height: '80%',
            selectionMode: 'multi',
            bindingOptions: {
                showSelectionControls: 'showControls',
            }
        }">
            <div data-options="dxTemplate:{ name:'item' }">
                <p style="font-size:larger;"><b>{{name}}</b></p>
                <p>Capital: <i>{{capital}}</i></p>
            </div>
        </div>
        <div style="margin-top: 15px;" class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">showSelectionControls</div>
                <div class="dx-field-value" dx-switch="{
                    bindingOptions: {
                        value: 'showControls'
                    }
                }"></div>
            </div>
        </div>
    </div>
    
    var myApp = angular.module('myApp', ['dx']);
    myApp.controller("demoController", function ($scope) {
        $scope.listDataSource = new DevExpress.data.DataSource([]);
        $scope.showControls = false;
        $.get("/Content/data/states.txt", function (data) {
            for (var i = 0; i < data.length; i++) {
                $scope.listDataSource.store().insert(data[i]);
            }
            $scope.listDataSource.load();
        }, "json");
    });
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myApp']);
    });
    
    body{
        text-align: center;
    }
    <div data-bind="dxList: {
        dataSource: listDataSource,
        height: '80%',
        selectionMode: 'multi',
        showSelectionControls: showControls
    }">
        <div data-options="dxTemplate:{ name:'item' }">
            <p style="font-size:larger;"><b data-bind="text: name"></b></p>
            <p>Capital: <i data-bind="text: capital"></i></p>
        </div>
    </div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">showSelectionControls</div>
            <div class="dx-field-value" data-bind="dxSwitch: { 
                value: showControls
            }"></div>
        </div>
    </div>
    
    var myViewModel = {
        listDataSource: new DevExpress.data.DataSource([]),
        showControls: ko.observable(false)
    }
    ko.applyBindings(myViewModel);
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            myViewModel.listDataSource.store().insert(data[i]);
        }
        myViewModel.listDataSource.load();
    }, "json");
    
    body{
        text-align: center;
    }
    <div id="myList"></div>
    <div style="margin-top: 15px;" class="dx-fieldset">
        <div class="dx-field">
            <div class="dx-field-label">showSelectionControls</div>
            <div class="dx-field-value" id="showControlsSelector"></div>
        </div>
    </div>
    
    var listDataSource = new DevExpress.data.DataSource([]);
    $("#myList").dxList({
        height: '80%',
        dataSource: listDataSource,
        selectionMode: 'multi',
        itemTemplate: function (itemData, itemIndex, itemElement) {
            itemElement.append("<p style=\"font-size:larger;\"><b>" + itemData.name + "</b></p>");
            itemElement.append("<p>Capital: <i>" + itemData.capital + "</i></p>");
        },
        showSelectionControls: false
    });
    $.get("/Content/data/states.txt", function (data) {
        for (var i = 0; i < data.length; i++) {
            listDataSource.store().insert(data[i]);
        }
        listDataSource.load();
    }, "json");
    $("#showControlsSelector").dxSwitch({
        value: false,
        onValueChanged: function (e) {
            $("#myList").dxList("instance").option("showSelectionControls", e.value);
        }
    });
    
    body{
        text-align: center;
    }

    tabIndex

    Specifies the widget tab index.

    Type: Number
    Default Value: 0

    useNativeScrolling

    Specifies whether or not the widget uses native scrolling.

    Type: Boolean
    Default Value: true
    Default for android below version 4: false
    Default for desktop: false
    Default for mac desktop: true

    visible

    A Boolean value specifying whether or not the widget is visible.

    Type: Boolean
    Default Value: true

    width

    Specifies the width of the widget.

    Type: Number|String|function
    Return Value: Number|String
    The widget width.
    Default Value: undefined

    The option can hold a value of the following types.

    • numeric
      The widget width in pixels.
    • string
      A CSS measurement of the widget width (e.g., "55px", "80%", "auto" and "inherit").
    • function
      The function returning the widget width. For example, see the following code.

      JavaScript
      width: function () { 
          return baseWidth - 10 + "%";
      }