在UWP中使用ListView展示项目时,有时需要从网络获取列表内容。这时如果一次获取全部将会占用大量时间,而且也不一定需要一次大量加载项目。这时就涉及到ListViewItem的动态加载。

大致步骤

IncrementalLoadingCollection表示一个支持增量加载的动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。而在XAML中ListViewItem与 IncrementalLoadingCollection 绑定即可。

/// <summary>
/// 表示一个支持增量加载的动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。
/// </summary>
/// <typeparam name="T">集合中的元素类型。</typeparam>
public class IncrementalLoadingCollection<T> : ObservableCollection<T>, ISupportIncrementalLoading

ISupportIncrementalLoading的构造如下

//
// Summary:
//     Specifies a calling contract for collection views that support incremental loading.
[ContractVersionAttribute]
[GuidAttribute(null, null, null, null, null, null, null, null, null, null, null)]
[WebHostHiddenAttribute]
public interface ISupportIncrementalLoading
{
    //
    // Summary:
    //     Initializes incremental loading from the view.
    //
    // Parameters:
    //   count:
    //     The number of items to load.
    //
    // Returns:
    //     The wrapped results of the load operation.
    [RemoteAsyncAttribute]
    IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(global::System.UInt32 count);

    //
    // Summary:
    //     Gets a sentinel value that supports incremental loading implementations.
    //
    // Returns:
    //     **true** if additional unloaded items remain in the view; otherwise, **false**.
    global::System.Boolean HasMoreItems { get; }
}

1、XAML

<ListView Name="newsListView" ItemsSource="{x:Bind newsListItems}"/>

2、XAML.cs

IncrementalLoadingCollection<NewsListItem> newsListItems1 = new IncrementalLoadingCollection<NewsListItem>(LoadMoreItemsFuncAsync, HasMoreItems);

根据 ISupportIncrementalLoading 的构造,我们需要传入两个方法:

  1. LoadMoreItemsFuncAsync方法返回类型为ObservableCollection<NewsListItem>,其中NewsListItem是“新闻类”。IncrementalLoadingCollection将会在列表滚动到底部并且
    HasMoreItems 返回值为True时执行该方法,并将返回值添加至
    IncrementalLoadingCollection 尾部
  2. HasMoreItems方法返回类型为bool,决定是否还有未加载完的内容。

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据