当我询问如何在 MVVM 中实现对话框时,有人建议我阅读此帖子:
MVVM, DialogService and Dialog Result
在 View 模型中,对话框的调用方式如下:
var dialog = new DialogViewmodel();
var result = _dialogservice.ShowDialog("My Dialog", dialog);
if(result.HasValue && result.Value)
{
//accept true
}
else
{
//Cancel or false
}
但这与以这种方式使用 messageBox 不同吗?
DialogResult result = MessageBox.Show("Hello");
if(result == DialgoResult-OK)
{
//accept true
}
else
{
//Cancel or false
}
在第二种情况下,我使用 MessageBox 而不是自定义对话框,因此我没有看到任何差异。
不管怎样,在很多情况下,我读到在 MVVM 应用程序中使用 MessageBox 是一个坏主意,因为它破坏了 MVVM 模式。但实际上,如果这是真的,我不明白第一个解决方案如何不会破坏 MVVM 模式,而第二个解决方案又会破坏它。最佳答案
MVVM 模式的基本思想是关注点分离。 View 模型不应该知道如何处理或呈现对话框。为什么?以下是一些原因:
- 测试您的 View 模型:不需要对话框(假设您需要一直点击对话框)
- 创建 GUI 应用程序的控制台应用程序(对话框应显示在控制台中,而不是弹出框)
- 需要更改对话框的设计(假设您需要更改所有 MessageBox 调用)
- ...
解决方案: 通过实现定义良好的对话框接口(interface)来使用依赖注入(inject)。您可以在 this answer 中找到一个非常好的基本示例。 .
结果:
调用 _dialogservice.ShowDialog
可能只是 MessageBox.Show
的包装,但也可能是测试期间控制台应用程序或调试日志中的某个对话框。因此代码与任何演示文稿都很好地分离。
关于c# - MessageBox 不推荐在 MVVM 应用中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45397485/