Снижение производительности WPF во время рендеринга пользовательского интерфейса - PullRequest
0 голосов
/ 02 декабря 2010

У меня есть следующие компоненты в приложении WPF:

(1) Окно

(2) ContentPresenter в окне, которое связано со свойством в базовом ViewModel.Это свойство ссылается на другую ViewModel.

(3) DataTemplate для ViewModel, который будет привязан к ContentPresenter, указанному выше.Этот шаблон данных создает стороннюю сетку, которая отображает некоторые данные.

Всякий раз, когда ContentPresenter отображает данные из DataTemplate, для визуализации интерфейса пользователя требуется примерно три-четыре секунды.Это приводит к зависанию пользовательского интерфейса на время, необходимое для визуализации содержимого.Поскольку я практически не контролирую, как сторонний элемент управления отображает сам себя, мой вопрос заключается в том, можно ли воспроизвести контент таким образом, чтобы пользовательский интерфейс не зависал.

Пожалуйста, сообщите.

Спасибо.

Крис

1 Ответ

1 голос
/ 03 декабря 2010

Сколько строк отображает сетка?И сколько из этих строк видно на экране?

Я спрашиваю, потому что возможно, что у вас есть макет пользовательского интерфейса, который побеждает виртуализацию.Обычно элементы управления, которые показывают прокручиваемый список данных, выполняют виртуализацию.(Встроенный ListBox делает это, и любая сторонняя сетка приемлемого качества должна делать то же самое.) Это критично для производительности, потому что это означает, что ваш пользовательский интерфейс должен создавать только те элементы, которые действительно видимы, а не всев вашем списке.

Но относительно легко победить эту виртуализацию случайно.Один из способов - обернуть список или элемент управления сеткой в ​​ScrollViewer.Вам нужно виртуализировать элементы управления, чтобы иметь возможность управлять собственной прокруткой, чтобы виртуализация работала, поэтому прокрутка должна происходить изнутри.Оборачивание элемента управления в ScrollViewer не позволяет ему выполнять собственную прокрутку.Другой способ может пойти не так, если вы подключите другой ItemsPanel.Третья возможность заключается в том, что вашему элементу управления списком / сеткой нужно указать виртуализацию.

Но если вы используете элемент управления, который просто отнимает много времени, чтобы отобразить только то, что нужно показать на экранетогда вы ничего не можете сделать - вам нужно связаться с поставщиком контроля или рассмотреть вопрос об использовании другого поставщика ...

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