1

我正在使用 MVVM Light 开发一个 MVVM 应用程序,总的来说,我发现它非常好用。但是,我有一个烦人的问题,希望有人能提供帮助。

我正在使用DialogMessage从 VM 向视图发送实例来显示对话框。结果通过回调发送回我的虚拟机,到目前为止一切都很好。

但是,对话框的结果(确定、是、否、取消等)作为enum System.Windows.MessageBoxResult. 对我来说,这似乎违背了 View/ViewModel 的分离,MessageBoxResult显然是 UI 中的一种类型,因此 VM 不应依赖于此或System.Windows命名空间中的任何内容。

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

这是可能的,还是我过于严格地希望将 UI 概念排除在 VM 之外?

4

1 回答 1

0

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

如果它仍然困扰您,您始终可以为DialogMessageDialog 创建一个包装器,获取MessageBoxResult并返回 a UserResult,它可以是具有相同值的枚举(将其视为一个简单的转换器)。
但正如我所说,我认为这可能是一个矫枉过正...

于 2012-11-19T10:05:58.203 回答