1

我已经实现了 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,并且在我滚动之前一直保持这种状态。非常感谢!

4

1 回答 1

1

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

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

DeviceListDataSource<Data> Items = new DeviceListDataSource<Data>(source);
Items.LoadMoreItemsAsync(10);
于 2018-01-19T02:49:24.140 回答