Come impaginare un ObservableCollection?
-
11-07-2019 - |
Domanda
Ho un ListBox con troppi elementi e l'interfaccia utente sta diventando sempre più lenta (la virtualizzazione è attiva, ecc.). Quindi stavo pensando di visualizzare solo i primi 20 elementi e consentire all'utente di navigare attraverso il set di risultati (ad esempio ObservableCollection).
Qualcuno sa se esiste un meccanismo di paginazione per ObservableCollection? Qualcuno l'ha mai fatto prima?
Grazie!
Soluzione
Questa funzione non è direttamente disponibile nella classe ObservableCollecton di base. È possibile estendere ObservableCollection e creare una raccolta personalizzata che lo faccia. Devi nascondere la Collezione originale all'interno di questa nuova classe e basata su FromIndex e ToIndex per aggiungere dinamicamente l'intervallo di elementi alla classe. Sostituisci InsertItem e RemoveItem. Sto dando una versione non testata sotto. Ma per favore prendi questo come solo pseudo codice.
//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);
}
}
AGGIORNAMENTO: ho un post sul blog su questo argomento qui - http: //jobijoy.blogspot.com/2008/12/paginated-observablecollection.html e il codice sorgente viene caricato in Codeplex .