Pergunta

Eu tenho um ListBox com demasiado muitos itens nele e a interface do usuário está ficando mais lento e mais lento (virtualização está ligado, etc). Então, eu estava pensando sobre exibindo apenas os primeiros 20 itens e permitir que o usuário para navegar pelo conjunto de resultados (ObservableCollection ou seja).

Alguém sabe se a exist mecanismo de paginação para o ObservableCollection? Alguém fez isso antes?

Obrigado!

Foi útil?

Solução

Esta facilidade não está directamente disponível na classe base ObservableCollecton. Você pode estender o ObservableCollection e criar uma coleção personalizada que faz isso. Você precisa esconder a coleção original para dentro desta nova classe e com base numa fromIndex e ToIndex dão adicionar dinamicamente a variedade de itens para a classe. Substituir InsertItem e RemoveItem. Estou dando uma versão abaixo não-testado. Mas por favor, tome isso como pseudo-código apenas.

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

UPDATE: Eu tenho um blog sobre este tema aqui - http: //jobijoy.blogspot.com/2008/12/paginated-observablecollection.html eo código fonte é carregado para Codeplex .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top