使用进度环增量加载

Incremental loading with progress ring

我在我的应用程序中实现了增量加载,它有 isLoading bool 变量,在构造函数中设置为 true 并设置为 false,当 hasMoreItems 设置为 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 在最后一个项目下载后。