适合 用于数据源来自网络的场景,如果网络状态欠佳,获取数据会耗费更长的时间,让用户一直等待将所有数据加载完成再进行下一步操作,有损用户体验。一个较好的方案是先提取一部分数据,当用户需要查看更多数据时再实时加载,这样做可以大大缩短提取数据的时间,改善用户体验,这种方案可称为增量加载。
增量加载由ListViewBase类支持,只有从ListViewBase类派生的控件类型才支持增量加载(如 ListView、GridView等)。此外,作为数据源的集合对象需要实现ISupportIncrementalLoading接口才能使用增量加载功能。为了能在数据源集合中的数据项发生变化后即使更新用户界面上的数据视图,集合类型也应该实现INotifyCollectionChanged接口(位于System.Collections.Specialized命名空间)。
位于System.Collections.ObjectModel命名空间下的ObservableCollection<T>类已实现了该接口,故应该使用该泛型集合类。
综上所述,实现数据的增量加载的一种较好的做法是从ObservableCollection<T>类派生出一个自定义类,同时实现ISupportIncrementalLoading接口,这样可以减少一些工作量。
下面示例中的集合主要存放double类型的元素。
class MyDataCollection:ObservableCollection<double>,ISupportIncrementalLoading
{
/// <summary>
/// 指示加载操作是否正在进行
/// </summary>
bool isLoading = false;
/// <summary>
/// 用于产生随机数的对象
/// </summary>
Random rand = new Random();
/// <summary>
/// 要加载的最大项目数
/// </summary>
const uint MAX_ITEM_COUNT = 10000;
public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsy