ISupportIncrementalLoading не работает, пока я не прокручиваю в GridView

Я реализовал 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 ответ

Решение

Есть ли способ загрузить первые элементы X в списке?

Вы уже имели LoadMoreItemsAsync метод реализован в DeviceListDataSource класс, просто вызовите этот метод для ручной загрузки кода элементов X при начальной загрузке. Например:

DeviceListDataSource<Data> Items = new DeviceListDataSource<Data>(source);
Items.LoadMoreItemsAsync(10);
Другие вопросы по тегам