У меня есть база данных с 10 000 элементов, к которым вы можете добавить и удалить во время работы приложения.Сортировка и фильтрация коллекции в Paged ListBox
У меня есть ListBox, который отображает не более 100 элементов и поддерживает подкачку.
Вы можете фильтровать и сортировать по 10 000 предметов, которые необходимо немедленно отобразить в списке.
У меня есть кнопка, которая случайным образом выбирает элемент, если он проходит фильтры.
Каков наилучший набор коллекций/видов, используемых для такого рода операций?
До сих пор моим первым шагом было создать ObservableCollection
ВСЕХ пунктов в базе данных, которые мы будем называть MainOC
.
Затем создайте List
из всех элементов, которые соответствуют фильтру парсинга MainOC
, который мы будем называть FilteredList
.
Затем создайте ListCollectionView
на основе вышеуказанного List
, который содержит первые 100 предметов.
МИНУСЫ:
- Вы должны воссоздать
ListCollectionView
каждый раз, когда применяется операция сортировки. - Вы должны воссоздать
ListCollectionView
при каждой странице. - При каждом изменении фильтра вы должны воссоздать
ListCollectionView
. - Вы должны воссоздать
ListCollectionView
каждый раз, когда предмет добавляется или удаляется доMainOC
.
Есть ли лучший подход, который мне не хватает?
Например, я вижу, что вы можете применять фильтры к ListCollectionView
. Должен ли я заполнять ListCollectionView
всеми 10 000 предметов? Но тогда как я могу ограничить количество предметов, отображаемых моим ListBox
?
Должен ли я выполнять фильтрацию и сортировку непосредственно в базе данных? Я мог бы построить FilteredList
непосредственно из базы данных и создать мой ListCollectionView
, основанный на этом, но у этого все еще есть все недостатки, перечисленные выше.
Ищет любые входные данные, которые вы можете предоставить!
не удается разрешить символ ObserveOnDispatcher – Julien
Установка Rx-Xaml из NuGet и включают в себя пространство имен System.Reactive.Linq –
пытался настроить супер простой пример. https://gist.github.com/julesx/acd0e1c03f9d90bd6094. Ничего не отображается, когда я добавляю в кеш, только когда я добавляю непосредственно к OC. Я что-то пропустил? – Julien