我正在使用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概念保留在虚拟机之外?
答案 0 :(得分:0)
关于你问题的第二部分,当我开始使用MVVM Light时,我也觉得在VM中接收MessageBoxResult
回来似乎有点面向UI。
另一方面,如果只有名称不同 - 例如你建议的UserResult - 那对你来说就足够了吗?
如果只有班级的名称是一个问题,我想你可以让它滑倒。 结果 Ok, Yes, No, Cancel
没有说明MessageBox是否显示了按钮,或者是否是其他类型的UI实现(假设带有组合框的表单)。
如果它仍然困扰你,你总是可以为DialogMessage
创建一个包装器,它会引发Dialog,得到MessageBoxResult
并返回一个UserResult
,它可以是一个枚举相同的值(将其视为简单的转换器)
但正如我所说,我认为这可能是一种过度杀伤......