2008-12-01 6 views
4

J'ai un ListBox avec beaucoup trop d'éléments et l'interface utilisateur devient de plus en plus lente (la virtualisation est activée, etc.). Je pensais donc à ne montrer que les 20 premiers éléments et permettre à l'utilisateur de naviguer dans le jeu de résultats (c'est-à-dire ObservableCollection).Comment paginer une ObservableCollection?

Est-ce que quelqu'un sait si un mécanisme de pagination existe pour ObservableCollection? Est-ce que quelqu'un l'a déjà fait?

Merci!

Répondre

4

Cette fonctionnalité n'est pas directement disponible dans la classe ObservableCollecton de base. Vous pouvez étendre ObservableCollection et créer une collection personnalisée qui le fait. Vous devez masquer la Collection originale dans cette nouvelle classe et, en fonction d'un FromIndex et de ToIndex, ajouter dynamiquement la plage d'éléments à la classe. Remplacer InsertItem et RemoveItem. Je donne une version non testée ci-dessous. Mais s'il vous plaît prenez ceci comme pseudo code.

//This class represents a single Page collection, but have the entire items available in the originalCollection 
public class PaginatedObservableCollection : ObservableCollection<object> 
{ 
    private ObservableCollection<object> originalCollection; 

    public int CurrentPage { get; set; } 
    public int CountPerPage { get; set; } 

    protected override void InsertItem(int index, object item) 
    { 
     //Check if the Index is with in the current Page then add to the collection as bellow. And add to the originalCollection also 
     base.InsertItem(index, item); 
    } 

    protected override void RemoveItem(int index) 
    { 
     //Check if the Index is with in the current Page range then remove from the collection as bellow. And remove from the originalCollection also 
     base.RemoveItem(index); 
    } 
} 

MISE À JOUR: J'ai un blog sur ce sujet ici - http://jobijoy.blogspot.com/2008/12/paginated-observablecollection.html et le code source est envoyé à Codeplex.

+0

C'est une bonne idée. J'aime le concept, mais nous dupliquons des objets dans la mémoire, non? – Martin

+0

Non, nous ne dupliquons pas les objets. Supposons qu'il y ait 10 pages avec 10 éléments dans chaque page. l'originalCollection aurait 100 éléments et nous référons seulement 10 à cette collection Pagined. –

Questions connexes