MVVM Light:如何从DialogMessage中删除System.Windows.MessageBoxResult的依赖项

时间:2012-11-19 09:25:49

标签: mvvm

我正在使用MVVM Light开发一个MVVM应用程序,总的来说,我发现它非常适合使用。然而,我有一个唠叨的问题,希望有人可以提供帮助。

我正在使用从VM发送DialogMessage的实例到View以显示对话框。结果通过回调发送回我的VM,到目前为止都很好。

然而,对话框的结果(OK,Yes,No,Cancel等)将作为enum System.Windows.MessageBoxResult的成员发回。这似乎违背了View / ViewModel与我的分离,MessageBoxResult显然是来自UI的一种类型,因此VM不应该依赖于System.Windows命名空间中的这个或任何东西。

我正在寻找的是使用DialogMessage替代回调,例如Action<UserResult>;而不是Action<System.Windows.MessageBoxResult>;,其中UserResult是我定义的类型用户选择而不依赖于MessageBoxResult

这是否可能,或者我是否过于严格,希望将UI概念保留在虚拟机之外?

1 个答案:

答案 0 :(得分:0)

关于你问题的第二部分,当我开始使用MVVM Light时,我也觉得在VM中接收MessageBoxResult回来似乎有点面向UI。 另一方面,如果只有名称不同 - 例如你建议的UserResult - 那对你来说就足够了吗?
如果只有班级的名称是一个问题,我想你可以让它滑倒。 结果 Ok, Yes, No, Cancel没有说明MessageBox是否显示了按钮,或者是否是其他类型的UI实现(假设带有组合框的表单)。

如果它仍然困扰你,你总是可以为DialogMessage创建一个包装器,它会引发Dialog,得到MessageBoxResult并返回一个UserResult,它可以是一个枚举相同的值(将其视为简单的转换器) 但正如我所说,我认为这可能是一种过度杀伤......