Listview加载两次



我需要在导航返回后设置列表视图中用户的滚动位置。列表位于一个主项目中。为了检测滚动位置,我使用.win-pivot-item-content

document.querySelector(".win-pivot-item-content").onscroll = function () {
    WinJS.Application.sessionState.scrollPosition = this.scrollTop;
};

我使用win-pivot-item-content的滚动位置,因为我的listview的滚动位置总是等于0…

这是一个诡计…但它起作用了。只有当win-pivot-item的大小小于15,000 px(+150个项目)(为什么?!)因为在那之后我的列表加载了2次

listView.winControl.onloadingstatechanged = function () {
    // fired twice .. 
};

我如何强制我的列表加载内容一次?

编辑:我基于应用程序模板开始了一个新项目,列表视图的滚动位置也等于0。

你的列表不是加载两次,这个事件会在列表加载时触发几次。

如果你想在列表完全加载时做一些事情,你必须检查加载状态:

listView.winControl.onloadingstatechanged = function (args) {
    if (ev.detail.loadingState === "complete") {
        // The code here will be called only when the list is fully loaded
    }
};

本文解释了listview的不同加载状态。

请注意,我的示例显示了如何等待加载结束,但在滚动的情况下,我认为可以在加载列表期间更早地完成(等待结束可能会导致列表滚动时的视觉故障)

最新更新