Как разбить ObservableCollection? - PullRequest
       21

Как разбить ObservableCollection?

4 голосов
/ 01 декабря 2008

У меня есть ListBox, в котором слишком много элементов, и пользовательский интерфейс становится все медленнее (виртуализация включена и т. Д.). Поэтому я думал о том, чтобы отобразить только первые 20 элементов и позволить пользователю перемещаться по набору результатов (то есть ObservableCollection).

Кто-нибудь знает, существует ли механизм разбиения на страницы для ObservableCollection? Кто-нибудь делал это раньше?

Спасибо!

1 Ответ

4 голосов
/ 01 декабря 2008

Эта возможность не доступна напрямую в базовом классе ObservableCollecton. Вы можете расширить ObservableCollection и создать собственную коллекцию, которая делает это. Вам необходимо скрыть исходную коллекцию внутри этого нового класса и на основе FromIndex и ToIndex динамически добавлять диапазон элементов в класс. Переопределите InsertItem и RemoveItem. Я даю не проверенную версию ниже. Но, пожалуйста, примите это как псевдокод.

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

ОБНОВЛЕНИЕ: у меня есть запись в блоге на эту тему здесь - http://jobijoy.blogspot.com/2008/12/paginated-observablecollection.html, и исходный код загружен в Codeplex .

...