在MVVM中,何时应该使用vs转换器?

时间:2011-07-01 20:47:32

标签: silverlight mvvm

我们已经讨论了几次关于何时在ViewModel中使用属性与何时使用Converter的讨论。

在以下情况下使用转换器:

  • 它可以在其他地方重复使用(一个很好的例子是IsVisibilityConverter)
  • 这是与UI相关的操作,例如根据参数值选择切换按钮
  • 不需要参数或可以是静态值

在以下情况下使用ViewModel属性:

  • 该值取决于另一个属性(例如:以秒显示的持续时间取决于用户在acombo框中选择的内容,小时,分钟,秒)
  • 需要进行单元测试
  • PropertyChanged事件可以更改其值
编辑:我应该提到我主要在Silverlight工作。所以我没有开箱即用的多绑定转换器,并且绑定到参数不起作用(我认为它在WPF中有效)。 你有什么想法?

2 个答案:

答案 0 :(得分:3)

一般来说,我试图将IValueConverter视为“纯粹的观点”。在这种情况下,它应该是可重用的视图代码。 (你也可以使用IMultiValueConverter来处理你需要“参数”的许多场景,只要它仍然是纯视图相关的......)

另一方面,ViewModel是特定于应用程序的逻辑。如果某些内容依赖于特定于您的域的状态,我宁愿将其直接放在ViewModel中。

答案 1 :(得分:1)

转换器的一个常见用途是像常用的BooleanToVisibilityConvertor一样重用。另一种用途是当您想要执行特定于视图的事物时。对于例如在您的模型中,您可能有一个十进制或整数值,如金额。但在视图中,您希望显示格式化的金额,如$ 10,000,000.00。在这种情况下,您可以使用值转换器。另一种情况是,您希望以不同的格式显示数据,如评级控件,可用于在UI中显示不同的表示形式,同时在数据库中以不同方式存储。

日期是我们可以使用价值转换器的另一个常见地方。想象一下,您希望在待办事项中显示有关任务的相关信息。根据当前数据和与任务相关的日期,您可以显示不同的状态,例如今天,明天,本周,本月等或过去发生的状态。

当模型中的值与需要在视图中显示的值之间不需要转换时,您将使用属性。