ListView不会触发selectionchanged

时间:2013-09-09 21:40:58

标签: javascript javascript-events winjs windows-8.1

我的HTML:

<div id="listViewBoxOffice" 
     data-win-control="WinJS.UI.ListView"  
     data-win-options="{ itemTemplate: select('#movieThumbnailTpl'), selectionMode: 'single' }">
</div>

我的javascript:

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

        listViewBoxOffice.winControl.addEventListener('selectionchanging', this.selectionchanging);
        listViewBoxOffice.winControl.addEventListener('selectionchanged', this.selectionchanged);

    },
    boxOffice: function (movies) {
        var list = new WinJS.Binding.List(movies);
        listViewBoxOffice.winControl.itemDataSource = list.dataSource;
    },
    errBoxOffice: function (err) {
        debugger;
    },
    selectionchanged: function (evt) {
        console.log('changed');
    },
    selectionchanging: function (evt) {
        console.log('changing');
    }
});

我的问题:

事件selectionchanged永远不会被触发。事件选择更改被触发但在newSelection

中值不正确

3 个答案:

答案 0 :(得分:3)

虽然文档并未像我认为的那样明确,但您需要将tapBehavior属性设置为"toggleSelect",以便完全选中项目。默认情况下,行为为invokeOnly,并且不会完全选择该项。它点击了,但没有被选中。

MSDN documentation中有一个不错的例子。

如果您存储了listViewBoxOffice实例的副本,那么从事件中,您可以通过承诺获取当前列表:

listViewBoxOffice.selection.getItems().done(function(items) {
    // do something with the items...
});

答案 1 :(得分:3)

检查selectionchanged事件是否正常工作右键单击listview项目。我认为当我们只需单击listview项目时,它需要iteminvoke事件,我们需要右键单击该项目。 以下是触发selectionchanged事件的代码snipet

 <div id="UserListView" data-win-control="WinJS.UI.ListView" style="border-top: 5px solid #000; min-width:500px;" 
           data-win-options="{
                               selectionMode:'multi',
                               itemTemplate:select('#itemsList'),
                               layout:{    
                               type:WinJS.UI.GridLayout}}"
         > 

    </div>

和js

 UserListView.addEventListener("selectionchanged", selection);

function selection(evt) {
        var test = "testing";


    }

设置断点,你可以在evt中检查type =“selectionchanged”

答案 2 :(得分:0)

请尝试使用调用的项目。这是Msdn链接 Item invoked Winjs Listview

并尝试相应地更改选择。 此外,如果这不起作用或您只想更改选择,请在您设计的模板中发布。将需要完成整个代码:)