C# MVVM,何时使用IValueConverter以及何时;格式化的;财产

C# MVVM,何时使用IValueConverter以及何时;格式化的;财产,c#,wpf,mvvm,ivalueconverter,C#,Wpf,Mvvm,Ivalueconverter,我正在设计我的应用程序模型,并开始思考,什么时候我应该使用格式化属性,什么时候使用IValueConverters,有什么一般的经验法则吗 例如,我有这样的模型: public interface IFlight { DateTime ArrivalTime { get; } TimeSpan Duration { get; } int LengthMeters{ get; } } 我有航班项目列表,我可以使用IValueConverters显示格式为“仅时间”的到达时间、格式为“

我正在设计我的应用程序模型,并开始思考,什么时候我应该使用格式化属性,什么时候使用IValueConverters,有什么一般的经验法则吗

例如,我有这样的模型:

public interface IFlight
{
  DateTime ArrivalTime { get; }
  TimeSpan Duration { get; }
  int LengthMeters{ get; }
}
我有航班项目列表,我可以使用IValueConverters显示格式为“仅时间”的到达时间、格式为“仅小时”的持续时间、格式为“英里”的长度

另一种方法是:

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

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

    int LengthMeters{ get; }
    string LengthFormatetd{ get; }
}
现在我可以将ArrivalTimeFormatted、DurationFormatted和LengthFormatted绑定到我的视图。这使视图(xaml)更干净,但模型稍微复杂一些


那么,哪一种方法通常更好?希望这不是一个太笼统的问题。

我认为它总是归结为个人参考

通常,我使用字符串和datetim等类型的格式化程序,我只是希望它们以一种漂亮的方式打印在UI上

对于ValueConverter,我通常采取完全不同的方法。一个常见的值转换我经常看到BooleanToVisibillityConverter,这里有一些决定控件是否显示的bool。通常,当您需要一些属性来决定某些操作是否将执行时,但不能直接使用该属性进行绑定


我希望这是有意义的:)

我会说这取决于应用程序。如果这是一个快速而肮脏的POC,那么在IFlight中进行。如果您想要更易于维护和重用的东西,我会使用值转换器,因为这肯定不是唯一一个使用这种格式逻辑的地方。

如果您遵循MVVM模式,这将是第一种方法。通过在代码中定义格式,可以将显示参数设置为固定系统。使用值转换器可以通过更改正在使用的转换器来更改xaml中的显示,从而将视图层释放到设备如何查看。ie也许您需要为不同国家定制转换器