【发布时间】:2018-01-05 22:33:01
【问题描述】:
当我询问如何在 MVVM 中实现对话框时,有人建议我阅读这个帖子:
MVVM, DialogService and Dialog Result
在视图模型中,对话框是这样调用的:
var dialog = new DialogViewmodel();
var result = _dialogservice.ShowDialog("My Dialog", dialog);
if(result.HasValue && result.Value)
{
//accept true
}
else
{
//Cancel or false
}
但这与以这种方式使用消息框不同吗?
DialogResult result = MessageBox.Show("Hello");
if(result == DialgoResult-OK)
{
//accept true
}
else
{
//Cancel or false
}
在第二种情况下,我使用 MessageBox 而不是自定义对话框,所以我看不出有任何区别。
无论如何,在很多情况下,我都读过在 MVVM 应用程序中使用 MessageBox 是个坏主意,因为它破坏了 MVVM 模式。但如果这是真的,我看不出第一个解决方案如何不破坏 MVVM 模式,而第二个解决方案又破坏了它。
【问题讨论】:
-
每个消息框都是 U/X 设计错误,因为它会打断用户。
-
但是在 MVVM 和软件架构上下文中,尝试从依赖关系和可测试性的角度来看待它。直接调用 MessagBox 的 VM 更难测试。
-
为什么不直接创建一个
IAlertService来处理MessageBoxs,就像处理对话框一样?