DataTrigger против привязки данных с производительностью конвертера

У меня есть большое количество стилей, определенных для моей сетки (цвета ячеек на основе состояния и т.д.). Прямо сейчас я использую DataTriggers для установки соответствующих цветов. Я хочу улучшить производительность своего приложения и думал, что большое количество стилей может привести к замедлению (из-за постоянного изменения данных и стилей, которые необходимо пересчитать или обновить). Лучше ли использовать привязку данных к конвертерам вместо DataTriggers?

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

Ответы

Ответ 1

В этот эпизод подкаста Hanselminutes, гость Лоран Бугнион (создатель MVVM Light) описывает, что есть хит производительности, связанный с использованием конвертеров, Он указывает, что он практически всегда ничтожен в настольных приложениях, но в приложениях WP7 рекомендуется, чтобы режимы просмотра отображали объекты, подобные кистям, напрямую, а не полагались в основном на конвертеры, особенно при работе с виртуализацией списка, и в этом случае прокрутка приведет к множеству invocations преобразования.

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

В качестве доказательства концепции вы можете рассмотреть возможность переноса вашей модели представления в "WPM Viewmodel", которая предоставляет цвета и другие значения, специфичные для WPF, а не какое-либо значение, из которого цвета могут быть определены средой выполнения вызывающие триггеры и IValueConverters. Затем вы сможете напрямую связать это с ним и не использовать ни триггеры, ни конвертеры. Мне было бы интересно услышать результаты.