0

J'essaie d'implémenter l'interface ISupportIncrementalLoading, car lorsque la barre de défilement arrive à la fin, charger plus d'éléments dans une autre URL.Implémentation de l'interface ISupportIncrementalLoading - Windows 10 UWP

Exemple (scénario attendu): Ma première demande me donne une liste d'éléments et un NextURL. L'URL suivante doit charger plus d'éléments jusqu'à ce que la page soit pleine. Lorsque j'appuie sur la barre de défilement, charger plus d'éléments.

Le problème: Ce travail parfait seulement dans les écrans avec une basse résolution, quand je teste ceci dans mon deuxième écran avec 1680x1050 charge pas plus d'article après la première demande (cette demande me donne un NextUrl).

J'essaie de implemet ceci: https://marcominerva.wordpress.com/2013/05/22/implementing-the-isupportincrementalloading-interface-in-a-window-store-app/

Une partie de mon code page différente mentionné précédemment:

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>(); 
    } 

Quelqu'un Aidez-moi s'il vous plaît?

Merci

+0

Si je comprends bien, il demande plus d'articles avant d'obtenir le NextUrl? Vous devriez poster le code complet s'il vous plaît (où vous ajoutez des articles, où vous obtenez cette URL) – fillobotto

+0

@FilippoB, je modifie mon poste, merci pour votre aide. Salutations – fipcurren88

Répondre

0

Le problème se produit parce que le nombre d'articles de la première demande ne remplit pas tout l'écran, donc LoadModeItemsAsync() est appelé deux fois (ou plus) très rapide, avant la première demande de finitions.

Pour gérer cela, j'ajouterai un marqueur boolean que vous définissez à true lorsque vous démarrez l'extraction de données et le faux lorsque vous avez terminé la tâche. Au début de la fonction de chargement, vous vérifiez simplement que cette valeur est définie sur false avant de commencer à télécharger plus de données.

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

Merci. Je change dans mon projet le code et le problème est le même. Après la première demande n'appelle pas NextUrl, rien de plus n'arrive vraiment! :( – fipcurren88

+0

@ fipcurren88 déboguer l'application et voir comment les variables sont mises à jour.Je ne vois pas d'autre problème ici – fillobotto

+0

Je le fais, mais ne comprends pas le problème, j'ai mis en pause dans toutes les lignes, mais pas understant, après cela problème, le code non déclenché dans la propriété HasMoreItems. – fipcurren88