Как отобразить в ListView большое количество записей?
В таблице БД ~50 000 записей. Я получаю их через Entity Framework и помещаю в переменную. Это занимает примерно 2 секунды по времени и потребляет 110Mb оперативки. Затем из этих данных формируется коллекция объектов, которая привязана к ListView.ItemsSource. И вот тут программа надолго задумывается и начинает потреблять оперативку дальше, а через очень долгое время что-то показывает и снова задумывается.
Хочу добиться какого-нибудь такого поведения: программа прикидывает, сколько записей может отобразить ListView в данный момент (если окно программы развернуто на весь экран, то вместится больше, чем если оно например небольшое), загружает это количество + еще столько же "вперед" и "назад" и по мере прокручивания списка (через ScrollViewer) догружает записи. Ну или если такое автоопределение сложнореализуемо, то хотя бы чтобы можно просто примерно задать количество записей, например, 50, и она грузила разом 150.
На данный момент я нашел демку Пола МакКлина, которая вроде бы делает нечто похожее, разбивая данные на страницы, и думаю, как ее прикрутить в свою программу. Пока не прикрутил, но уже вижу потенциальные проблемы. Например, моя коллекция - это ObservableCollection, на событие изменения которой повешено OnPropertyChanged, чтобы когда элементы удаляются из коллекции, изменения сразу были видны в UI. А в этой демке, по сути, реализовано только отображение и обход элементов, а удаление, добавление и прочий функционал коллекций, отсутствует. Как вариант, можно унаследовать этот демо-класс от ObservableCollection, подправить тут, подправить там, и может заработает. Через EF я могу вытащить записи с n по m, а через кастомную реализацию индексатора и Enumerator'а эти записи, по идее, можно подсунуть ListView'у.
Но статья 2013 года, не появилось ли с тех пор какое-нибудь "официальное" средство виртуализации данных, которое можно было бы применить в моем случае?