WPF медленный, когда TabControl привязан к ViewModels - PullRequest
4 голосов
/ 05 июня 2011

У меня TabControl привязано непосредственно к IEnumerable<ViewModelBase> (разные ViewModels), визуализируется с использованием DataTemplates. НО при переключении вкладок можно увидеть, что TabItems полностью перерисован, и это слишком медленно.Это нормально ???

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Действительно ли ваш контекст данных выставляет IEnumerable<T> в качестве источника привязки? Если это так, я рекомендую вам взглянуть на Как разрешаются привязки данных . Это явно не решит проблему перерисовки, но если вы предоставите источник данных моделей представлений, используя коллекцию, которая поддерживает интерфейс INotifyPropertyChanged , такой как ObservableCollection или ICollectionView источник данных, вы получите лучшее связывание и производительность рендеринга.

Что касается перерисовки этой проблемы, вы должны взглянуть на это сообщение доктора WPF . Существует предлагаемое решение проблемы производительности, с которой вы сталкиваетесь, и чтобы сделать еще один шаг вперед, вы должны написать подкласс TabControl и, возможно, использовать VirtualizingStackPanel в качестве источника элементов пользовательского TabControl.

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

1 голос
/ 06 июня 2011

Я бы сказал, что да, DataTemplates - это чертежи того, как создавать объекты, поэтому ваш TabControl вполне может выбросить содержимое старой вкладки и создать новую, если вы переключаете вкладки. Возможно этот вопрос связан.

( Даже если раньше люди жаловались на поведение, которое TabControl может фактически использовать объекты, я полагаю, это может зависеть от базового типа элементов )

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