MVVM,何时使用IValueConverter和“格式化”属性

时间:2014-04-08 19:19:35

标签: c# wpf mvvm ivalueconverter

我正在设计我的应用模型并开始疑惑,当我应该使用格式化属性和IValueConverters时是否有任何通用的拇指规则?

例如,我有这样的模型:

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

我有Flight项目列表,我可以使用IValueConverters显示ArrivalTime格式化为仅时间,持续时间格式化为仅几小时,长度格式化为英里。

另一种方法是:

 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 个答案:

答案 0 :(得分:1)

我认为这总是归结为个人参考。

通常,我使用格式化程序,例如string和datetim,我只希望它们以非常方式在UI上打印。

使用ValueConverters,我通常采取完全不同的方法。一个常见的ValueCnverter我常常看到BooleanToVisibillityConverter是否有一些bool决定是否显示一个控件。通常当你想要一些属性决定某些动作是否会执行但你不能直接使用该属性时使用Binding。

我希望这是有道理的:)

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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