带进度环的增量加载

本文关键字:加载 | 更新日期: 2024-10-22 15:59:27

我在应用程序中实现了增量加载,它有isLoading布尔变量,在构造函数中设置为true,当hasMoreItems设置为false时设置为false。我有ProgressRing,它是这样工作的:

private void List_LayoutUpdated(object sender, object e)
{
    if (list.Items.Count == 0 && list.ItemsSource == null)
        CenterProgressRing.IsActive = true;
    else if (list.Items.Count == 0 && list.ItemsSource != null) 
    {
        if (!((IncrementalSource)this.list.ItemsSource).isLoading)
            CenterProgressRing.IsActive = false; 
        else CenterProgressRing.IsActive = true;
    }
    else CenterProgressRing.IsActive = false;        
}

因此,它在加载第一页时显示ProgressRing,当有项目要接收时,它工作得非常好。但是,当遇到无需加载的情况时,ProgressRing将永远保持活动状态。我不明白为什么。

带进度环的增量加载

首先,简化条件(删除嵌套和否定)。

if (list.ItemsSource == null)
{
    CenterProgressRing.IsActive = false;
    return;
}
CenterProgressRing.IsActive = ((IncrementalSource)this.list.ItemsSource).isLoading;

如果在下载最后一个项目后没有调用List_LayoutUpdated(因为布局没有更新),那么它可能不起作用。可能,您可以在IncrementalSource中更新CenterProgressRing.IsActive(如果您实现了一个事件或使isLoading可观察到),或者确保在下载最后一个项目后List_LayoutUpdated。