Добавление к сообщению 4 месяцев назад, которое, к сожалению, не получить любой ответ.
Я в основном стою перед той же проблемой при использовании множественного выбора в сетке данных со сдвигом.
Когда где-то в середине огромного списка (скажем, это 1 000 000 элементов в сетке, все данные виртуализированы) и мне нужно было выбрать от 500 000 до 500 050 с помощью Shift + щелчок мышью, сетка вызывает метод «GetEnumerator()» моего виртуальный список (аналогичная реализация Винсента и Пола). То, что я делал до сих пор, было просто SelectMany на кешированных страницах. Но, к сожалению, это привело к неправильному выбору строк (в то время как ctrl + щелчок мыши делает свою работу!).
Итак, я обнаружил, что DataGrid фактически ожидает все элементы от индекса 0 до последнего из выбора. Это, очевидно, не идеально для списка из 1 млн элементов, поскольку это приведет к запросам для каждого элемента от 0 до (в моем примере) 500 050 и, таким образом, к загрузке всего из базы данных.
Таким образом, мои вопросы будут такими же, как и у Дэниела в ссылке, опубликованной выше:
Почему DataGrid запрашивает элементы несколько раз (выбранные элементы запрашиваются примерно 6-7 раз подряд без видимой причины)?
Есть ли способ сказать DataGrid не использовать Enumerator и просто брать выбранные элементы, а не выполнять итерацию с 0?
Большое вам спасибо, надеюсь, мне повезет получить хотя бы наводящие на размышления ответы, поскольку о виртуализации данных не так много можно найти.