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!

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top