Когда использовать преобразователи значений в приложении mvvm?

Если кто-то реализует приложение WPF с использованием шаблона проектирования MVVM, существует ли какая-либо ситуация, в которой можно использовать преобразователи значений? Мне кажется, что преобразователи значений делают то же самое, что и модель представления, то есть подготавливают данные для представления.

Итак, есть ли хорошие способы применения преобразователей стоимости?

С уважением, Оливер Ханаппи


person Oliver Hanappi    schedule 10.02.2010    source источник


Ответы (2)


Конвертеры значений удобны для преобразования логических состояний в визуальные состояния, которые актуальны только для пользовательского интерфейса. Например, преобразователь BooleanToVisibility имеет свое место в приложении MVVM.

Однако я бы никогда не рекомендовал использовать преобразователи для выполнения каких-либо сложных преобразований с различными входными параметрами или вызова какой-либо бизнес-логики в их реализации. Это вещи ВМ.

person olli-MSFT    schedule 10.02.2010
comment
Вы также не должны использовать преобразователь значений для чего-то вроде преобразования Bool-Visibility. Лучшее решение - использовать Style с привязкой DataTrigger к переменной непосредственно в XAML и использовать Setter для видимости. - person mDC; 22.06.2016

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

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

person Robert Rossney    schedule 10.02.2010