В MVVM, когда следует использовать свойство по сравнению с конвертером? - PullRequest
2 голосов
/ 02 июля 2011

Мы несколько раз обсуждали, когда использовать свойство в ViewModel, а когда использовать конвертер.

Использовать конвертер, когда:

  • он может быть повторно использован в других местах (отличный пример - IsVisibilityConverter)
  • это действие, связанное с пользовательским интерфейсом, например, переключение кнопки на основе значения параметра
  • параметр не нужен или может быть статическим значением

Использовать свойство ViewModel, когда:

  • Значение зависит от другого свойства (пример: длительность, отображаемая в секундах, зависит от того, что пользователь выбрал в поле со списком, часы, минуты, секунды)
  • Это должно быть проверено модулем
  • События PropertyChanged могут изменить свое значение

РЕДАКТИРОВАТЬ: я должен отметить, что я работаю в основном в Silverlight. Поэтому у меня нет готовых конвертеров связывания, а привязка к параметру не работает (что, я думаю, в WPF). Что ты думаешь?

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

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

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

1 голос
/ 02 июля 2011

Одно из распространенных применений конвертера - для повторного использования, как обычно используемый BooleanToVisibilityConvertor. Другое использование, когда вы хотите выполнить просмотр конкретных вещей. Например, в вашей модели вы можете иметь десятичное или целочисленное значение, например сумму. Но в представлении вы хотите показать отформатированную сумму, например, $ 10 000 000,00. В этом случае вы можете использовать конвертер значений. В другом случае вы хотите отобразить данные в другом формате, например, элемент управления рейтингом, который можно использовать для отображения другого представления в пользовательском интерфейсе, сохраняя его по-разному в базе данных.

Даты - еще одно распространенное место, где мы можем использовать преобразователи значений. Представьте себе сценарий, в котором вы хотите отобразить относительную информацию о задаче в приложении. На основании текущих данных и даты, связанной с задачей, вы можете отобразить другой статус, например, происходит сегодня, завтра, на этой неделе, в этом месяце и т. Д. Или в прошлом.

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

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