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.
C'est une bonne idée. J'aime le concept, mais nous dupliquons des objets dans la mémoire, non? – Martin
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. –