在我在GridView中滚动之前,ISupportIncrementalLoading不起作用

时间:2018-01-18 04:08:13

标签: c# .net xaml uwp data-virtualization

我已经实现了ISupportIncrementalLoading,以便在用户滚动时加载列表中的大量项目。当我加载视图时,它是空的,它只会加载更多的数据,直到我滚动列表。

这是实现它的类

  public class DeviceListDataSource<T> : ObservableCollection<T>, ISupportIncrementalLoading
    where T : class
{
    public int LastItem = 0;

    public bool HasMoreItems => hasMoreItems;

    private int currentPage;

    private List<T> source;

    private bool hasMoreItems;

    public DeviceListDataSource(List<T> source)
    {
        this.source = source;
        hasMoreItems = true;
    }

    public async Task<IEnumerable<T>> GetPagedItems(int pageIndex, int pageSize)
    {
        return await Task.Run(() =>
        {
            var result = (from p in source
                          select p).Skip(pageIndex * pageSize).Take(pageSize);

            return result;
        });

    }

    public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
    {
        var dispatcher = Window.Current.Dispatcher;
        return Task.Run(
       async () =>
       {
           var result = await GetPagedItems(currentPage++, (int) count);

           if (result == null || result.Count() == 0)
           {
               hasMoreItems = false;
           }
           else
           {

               await dispatcher.RunAsync(
                   CoreDispatcherPriority.Normal,
                   () =>
                   {
                       foreach (T item in result)
                       {
                           Add(item);
                       }
                   });
           }

           return new LoadMoreItemsResult() { Count = (uint)currentPage };

       }).AsAsyncOperation();
    }
}

}

在视图模型中,我将其分配给绑定到xaml视图中列表视图的变量:Items = new DeviceListDataSource<DataObject>(source);

有没有办法加载列表中的前X项?它在第一次加载时始终为0,并且在我滚动之前一直保持这种状态。非常感谢!

1 个答案:

答案 0 :(得分:1)

  

有没有办法加载列表中的前X项?

您已经在LoadMoreItemsAsync类中实现了DeviceListDataSource方法,只需调用此方法即可在初始加载时手动加载X项代码。例如:

DeviceListDataSource<Data> Items = new DeviceListDataSource<Data>(source);
Items.LoadMoreItemsAsync(10);