【问题标题】:ISupportIncrementalLoading does not work until I scroll in GridView在滚动 GridView 之前,ISupportIncrementalLoading 不起作用
【发布时间】:2018-01-18 04:08:13
【问题描述】:

我实现了 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&lt;DataObject&gt;(source);

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 正确,我想知道这是否是正确的方法,因为我发现的教程/示例没有提到它是必要的。我就是这样解决的,谢谢!
    猜你喜欢
    • 2015-03-06
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多