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. Если вы хотите что-то более удобное для обслуживания и повторного использования, я бы использовал конвертер значений, поскольку это, безусловно, не будет единственным местом, где эта логика форматирования будет полезна.