MVVM, когда использовать IValueConverter и когда "отформатировано" свойство

Я проектирую свои модели приложений и начал задаваться вопросом, есть ли какое-нибудь общее правило большого пальца, когда я должен использовать отформатированные свойства и когда IValueConverters?

Например, у меня есть такая модель:

public interface IFlight
{
  DateTime ArrivalTime { get; }
  TimeSpan Duration { get; }
  int LengthMeters{ get; }
}

У меня есть список элементов Flight, я могу использовать IValueConverters для отображения ArrivalTime, отформатированного только до времени, Duration, отформатированного только до часов, Length, отформатированного до миль.

Еще один способ сделать это:

 public interface IFlight
{
    DateTime ArrivalTime { get; }
    string ArrivalTimeFormatted { get; }

    TimeSpan Duration { get; }
    string DurationFormatted { get; }

    int LengthMeters{ get; }
    string LengthFormatetd{ get; }
}

Теперь я могу просто привязать ArrivalTimeFormatted, DurationFormatted и LengthFormatetd к своему представлению. Это делает представление (xaml) чище, но модели немного сложнее.

Так какой из них вообще лучше подходит? Надеюсь, это не слишком общий вопрос.

3 ответа

Решение

Я думаю, что это всегда сводится к личной ссылке.

Обычно я использую средства форматирования с такими типами, как string и datetim, где я просто хочу, чтобы они печатались на интерфейсе красивым способом.

С ValueConverters я обычно использую совершенно другой подход. Обычный ValueCnverter, который я часто вижу, если BooleanToVisibillityConverter, где у вас есть какой-то bool, который решает, будет ли отображаться элемент управления или нет. как правило, когда вы хотите иметь какое-либо свойство, которое решает, будут ли выполняться некоторые действия или нет, но вы не можете использовать это свойство прямым способом с Binding.

Я надеюсь, что это имело смысл:)

Если вы следуете шаблону MVVM, это будет первый путь. Определяя форматирование в коде, вы устанавливаете параметры отображения как фиксированную систему. Использование конвертера значений позволяет изменить отображение в xaml, изменив используемый конвертер, высвободив слой представления для устройства. то есть, возможно, вам нужны нестандартные конвертеры для разных стран.

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

Другие вопросы по тегам