增量加载未加载所有数据

时间:2016-03-22 13:44:08

标签: c# lazy-loading

我已经实现了这样的增量加载:

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);  

然而它再次无法运作。那么问题可能在于添加?但我想不出可能的原因......

0 个答案:

没有答案