0

Я пытаюсь реализовать интерфейс ISupportIncrementalLoading, поскольку, когда полоса прокрутки заканчивается, загружайте больше элементов в другой URL.Реализация интерфейса ISupportIncrementalLoading - Windows 10 UWP

Пример (Ожидаемый сценарий): Мой первый запрос дает мне список предметов и один NextURL. Следующий URL-адрес должен загружать больше товаров, пока страница не будет заполнена. Когда я нажимаю полосу прокрутки, загружаю элементы.

Проблема: эта работа идеальна только на экранах с низким разрешением, когда я тестирую это, мой второй экран с 1680x1050 не загружает больше предметов после первого запроса (этот запрос дает мне NextUrl).

Я стараюсь implemet это: https://marcominerva.wordpress.com/2013/05/22/implementing-the-isupportincrementalloading-interface-in-a-window-store-app/

Часть моего кода другой странице упоминалось:

private string NextUrl { get; set; } 
    private int currentPage; 
    private object MyData{ get; set; } 

    public bool HasMoreItems 
    { 
     get { 
      return hasMoreItems; 
     } 
    } 

    public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count = 0) 
    { 

     var dispatcher = Window.Current.Dispatcher; 

     return Task.Run<LoadMoreItemsResult>(
      async() => 
      { 

       var result = await this.Source.GetPage(this.MyData, this.NextUrl , this.CurrentPage++); 

       if (string.IsNullOrEmpty(result.NextUrl)) 
        hasMoreItems = false; 
       else 
        hasMoreItems = true; 

       if (result != null || result.Items.Count() == 0) 
       { 
        this.NextUrl = result.NextUrl ; 
        resultCount = (uint)result.Items.Count(); 

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

        return new LoadMoreItemsResult() { Count = resultCount }; 
       } 
      }).AsAsyncOperation<LoadMoreItemsResult>(); 
    } 

кто-нибудь помочь мне, пожалуйста?

Благодаря

+0

Если я правильно понял, он запрашивает больше предметов, прежде чем вы получите NextUrl? Вы должны отправить полный код, пожалуйста (где вы добавляете элементы, где вы получаете этот URL-адрес) – fillobotto

+0

@FilippoB, я редактирую свой пост, спасибо за вашу помощь. Приветствия – fipcurren88

ответ

0

Проблема возникает потому, что количество элементов из первого запроса не заполнить весь экран, так LoadModeItemsAsync() вызывается дважды (или более) очень быстро, до первого запроса отделки.

Чтобы обработать это, я бы добавил маркер boolean, который вы установили в true, когда вы начинаете получать данные и ложь, когда вы заканчиваете задачу. В начале функции загрузки вы просто проверяете, что для этого значения установлено значение false, прежде чем загружать больше данных.

private string NextUrl { get; set; } 
private int currentPage; 
private object MyData { get; set; } 

private bool _isLoading = false; 

public bool isLoading 
{ 
    get { return _isLoading; } 
    set { _isLoading = value; } 
} 

public bool HasMoreItems 
{ 
    get 
    { 
     return hasMoreItems; 
    } 
} 

private async Task<LoadMoreItemsResult> LoadDataAsync() 
{ 

    if (!isLoading) 
     isLoading = true; 
    else 
     return new LoadMoreItemsResult { Count = (uint)this.Count }; 

    var result = await this.Source.GetPage(this.MyData, this.NextUrl, this.CurrentPage++); 

    if (string.IsNullOrEmpty(result.NextUrl)) 
     hasMoreItems = false; 
    else 
     hasMoreItems = true; 

    if (result != null || result.Items.Count() == 0) 
    { 
     this.NextUrl = result.NextUrl; 
     resultCount = (uint)result.Items.Count(); 

     await dispatcher.RunAsync(
      CoreDispatcherPriority.Normal, 
      () => 
      { 
       foreach (ItemType item in result.Items) 
        this.Add(item); 
      }); 
    } 
    isLoading = false; 

    return new LoadMoreItemsResult { Count = (uint)this.resultCount }; ; 
} 

public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count = 0) 
{ 
    return LoadDataAsync().AsAsyncOperation<LoadMoreItemsResult>(); 
} 
+0

Спасибо. Я изменяю в своем проекте код, и проблема такая же. После первого запроса не вызывайте NextUrl, больше ничего не происходит! :( – fipcurren88

+0

@ fipcurren88 отлаживать приложение, видеть, как переменные обновляются. Я не вижу никакой другой проблемы здесь – fillobotto

+0

Я делаю это, но не понимаю проблему, я установил точку останова во всех строках, но не понял, после чего проблема, код не запускается в свойстве HasMoreItems. – fipcurren88

Смежные вопросы