Я знаю, что DataGrid поддерживает виртуализацию, поэтому он создает ячейки сетки только для видимых строк. Однако, похоже, это работает, только если DataGrid ограничен по размеру.Использование виртуализации для WPF DataGrid внутри ScrollViewer
В моем сценарии DataGrid помещается внутри свитка зрителя, как и
<ScrollViever>
<StackPanel>
<more elements .../>
<DataGrid ... />
<more elements .../>
</StackPanel>
</ScrollViever>
Это, кажется, сломать виртуализации. В тех случаях, когда DataGrid должен отображать большое количество элементов, визуальное дерево становится очень большим, даже до прокрутки во внешнем ScrollViewer.
Есть ли способ предотвратить DataGrid от предварительного создания всех ячеек и, скорее, создать их при прокрутке ScrollViewer?
EDIT: в основном размещение страницы должно быть похоже на веб-страницу с текстом наверху, большой стол и еще один текст внизу. Вместо dockview, где верхняя/нижняя всегда видна, и только прокрутка сетки, вся страница должна прокручиваться. Настройка достигает этого, но страдает от всего, что было создано заранее.
ДРУГОЕ ИЗОБРАЖЕНИЕ: Есть ли способ обнаружить, что определенный ряд данных был прокручен в поле зрения? Типичные ленивые загрузочные предметы используют datagrid's scrollviewer для добавления дополнительных элементов в сетку, которые здесь не работают.
VirtualisingStackPanel? –
Но будет ли VirtualizingStackPanel (как родитель DataGrid) заставлять DataGrid генерировать только видимые дочерние элементы? Я понимаю, что VirtualizingStackPanel будет создавать дочерние элементы ITS по требованию, что означает, что как только первый верхний пиксель DataGrid станет видимым, будет создан ENTIRE DataGrid? Или я чего-то не хватает? – user1211286
Только что протестировано: ScrollViewer-VirtualizingStackPanel-DataGrid не решает проблему. DataGrid все еще будет генерировать все свои строки. – user1211286