Виртуализация DataGrid внутри ListBox - PullRequest
1 голос
/ 27 октября 2019

Мой макет:
enter image description here

Виртуализация внешнего ListBox работает, а для внутреннего DataGrid - нет. Возможно, потому что внешний ListBox содержит ScrollViewer внутри:

ScrollViewer предоставляет окно для своего дочернего содержимого. Проблема в том, что дочернему контенту предоставляется неограниченное виртуальное пространство. В этом виртуальном пространстве DataGrid отображает себя в натуральную величину со всеми его дочерними элементами.

Похоже, простого решения не существует.
Но я бы хотел дажеобходной путь. Может быть, как-то ограничить виртуальное пространство внешнего ScrollViewer?

Ответы [ 2 ]

2 голосов
/ 27 октября 2019

Я не уверен, что ScrollViewer виноват первым. ListBox использует StackPanel с вертикальной ориентацией в качестве ItemsPanel. А вертикальная StackPanel не ограничивает высоту дочерних элементов.

Вместо изменения пространства контейнера ограничьте размер DataGrid, установив DataGrid.MaxHeight, и StackPanel не даст ему больше высоты, чем этот предел. И тогда ScrollViewer будет ограничен общим размером всей DataGrid.

0 голосов
/ 27 октября 2019

Только что нашел похожий ответ здесь DataGrid внутри виртуализации Datagrid

Можете ли вы попробовать исправить height внутреннего datagrid. Таким образом, будет отображаться только его часть с включенной прокруткой. Это позволит виртуализировать внутренний datagrid, поскольку за один раз отображается только его часть, а остальные будут динамически отображаться во время прокрутки, и это увеличит скорость загрузки datagrid's.

Если помогло, перейдите по ссылке выше и проголосуйте за его ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...