我已经实现了这样的增量加载:
public class IncrementalDataSource : ObservableCollection<Files>, ISupportIncrementalLoading
{
private int id;
private int itemsPerPage;
private int currentPage;
public IncrementalMediaEntrySource(int ID, int ipp = 4)
{
HasMoreItems = true;
id = ID;
itemsPerPage = ipp;
currentPage = 1;
}
public bool HasMoreItems
{
get;
private set;
}
public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
{
var dispatcher = Window.Current.Dispatcher;
return Task.Run<LoadMoreItemsResult>(
async () =>
{
uint resultCount = 0;
var result = await GetData(id, itemsPerPage, currentPage++);
if (result == null || result.Count() == 0)
{
HasMoreItems = false;
}
else
{
resultCount = (uint)result.Count();
await dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
() =>
{
foreach (var item in result)
this.Add(item);
});
}
return new LoadMoreItemsResult() { Count = resultCount };
}).AsAsyncOperation<LoadMoreItemsResult>();
}
}
但它没有加载所有数据。它只能从100多件商品中获得约16件商品。如果我将 itemsPerPage 从4更改为10,它将获取所有项目。但是加载10个项目需要花费太长时间,因此我想留下4个项目。当然,我想知道,造成这种情况的原因是为了避免这种情况。哪个可能是问题?
更新
我的一个朋友建议添加&#34;假的&#34;对象,如果 itemsPerPage 小于7(它正常工作的最小数量),那么收到的总对象将是7.我试过,它实际上工作,但当然添加了空对象,这是完全没用的。所以我在将对象添加到ObservableCollection<Files>
之前添加了检查,如下所示:
foreach (var item in result)
if (item.Id != null) this.Add(item);
然而它再次无法运作。那么问题可能在于添加?但我想不出可能的原因......