当用户滚动到Windows Phone中的列表末尾时加载数据会在5或6次滚动后停止

时间:2015-09-23 15:23:24

标签: windows-phone-8 windows-phone-8.1 windows-phone

我正在开发一个Windows Phone 8.1应用程序,我有一个包含大量数据项的列表页面。

所以我决定在ListBox上实现增量加载。幸运的是,我从Danial vaugan的Loading Data when the User Scrolls to the End of a List in Windows Phone 7样本

获得了解决方案

滚动效果很好。但是注意到在5或6次增量加载后,Scrollviewer偏移量变化不起作用。从那时起,这个概念就不起作用了。

Here是我对Daniel Vaughan的示例项目的样本,它只加载了79个项目。之后滚动更改无效。

ScrollViewer是否有任何限制以防止它在某些值后偏移?但我不这么认为,因为我一次装了超过1000件物品,它顺利滚动到最后。

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

这是一个不使用MVVM的简单实现。我们的想法是获得ListView的{​​{1}}。

ScrollViewer

您需要为onLoaded添加事件处理程序。

public static ScrollViewer GetScrollViewer(DependencyObject depObj)
{
    if (depObj is ScrollViewer) return depObj as ScrollViewer;

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
    {
        var child = VisualTreeHelper.GetChild(depObj, i);

        var result = GetScrollViewer(child);
        if (result != null) return result;
    }
    return null;
}

将MainPage_ViewChanged事件处理程序作为。

ScrollViewer viewer = GetScrollViewer(this.storylist);
    viewer.ViewChanged += MainPage_ViewChanged;

这是一步一步xlwings

这不是很整洁,因为它不遵循MVVM模式。幸运的是WP 8.1支持private async void MainPage_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e) { ScrollViewer view = (ScrollViewer)sender; double progress = view.VerticalOffset / view.ScrollableHeight; System.Diagnostics.Debug.WriteLine(progress); if (progress > 0.7 & !incall && !endoflist) { incall = true; fetchCountries(++offset); } } ,可以按tutorial中的描述实现。

答案 1 :(得分:0)

Atlast找到了另一种获得解决方案的方法。使用x+1=0; x+1=y; x=1; 控件进行增量列表加载。它按预期工作。

Longlist Selector

TwitterSearch - Windows Phone 8 LongListSelector Infinite Scrolling Sample