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

MVVM指示灯:如何从DialogMessage中删除System.Windows.MessageBoxResult的依赖项,mvvm,Mvvm,我正在使用MVVM Light开发一个MVVM应用程序,总的来说,我觉得使用它非常好。然而,我有一个棘手的问题,希望有人能帮助我 我正在使用DialogMessage实例从VM发送到视图以显示对话框。结果通过回调发送回我的虚拟机,到目前为止一切正常 但是,对话框OK、Yes、No、Cancel等的结果将作为enum System.Windows.MessageBoxResult的成员发送回。对我来说,这似乎与视图/视图模型分离背道而驰,MessageBoxResult显然是UI中的一种类型,因此

我正在使用MVVM Light开发一个MVVM应用程序,总的来说,我觉得使用它非常好。然而,我有一个棘手的问题,希望有人能帮助我

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

但是,对话框OK、Yes、No、Cancel等的结果将作为enum System.Windows.MessageBoxResult的成员发送回。对我来说,这似乎与视图/视图模型分离背道而驰,MessageBoxResult显然是UI中的一种类型,因此VM不应该依赖于System.Windows命名空间中的这种类型或任何类型

我要寻找的是使用DialogMessage的另一种回调方法,例如操作;而不是行动;,其中UserResult是我定义的一种类型,用于表示用户的选择,而不依赖于MessageBoxResult


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

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

如果它仍然困扰您,您可以始终为DialogMessage创建一个包装器,它将引发对话框,获取MessageBoxResult并返回一个UserResult,它可以是一个具有相同值的枚举,可以将其视为一个简单的转换器。
但正如我所说的,我认为这可能是一种过激行为。

@Blachshma谢谢你的回复。我可能会使用您的建议包装DialogMessage并转换结果。