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, и он остается таким, пока я не прокручиваю. Большое спасибо!


person marsalal1014    schedule 18.01.2018    source источник


Ответы (1)


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

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

DeviceListDataSource<Data> Items = new DeviceListDataSource<Data>(source);
Items.LoadMoreItemsAsync(10);
person Sunteen Wu    schedule 19.01.2018
comment
правильно, мне было интересно, был ли это правильный способ сделать это, поскольку в учебниках/примерах, которые я нашел, не упоминалось, что это необходимо. Вот как исправляюсь, спасибо! - person marsalal1014; 19.01.2018