我有一个 WPF 应用程序它在 ViewModel 中调用 MessageBox.Show()(以检查用户是否确实想要删除)。 这实际上有效,但是违背了 MVVM 的原则,因为 ViewModel 不应该明确确定 View 上发生的情况。
所以现在我在想如何在我的 MVVM 应用程序中最好地实现 MessageBox.Show() 功能,选项:
我可以收到一 strip 有“您确定...?”的消息吗?以及两个按钮是和否都在我的 XAML 中的边框中,并在模板上创建一个触发器,以便它基于名为 AreYourSureDialogueBoxIsVisible 的 ViewModelProperty 折叠/可见,然后当我需要此对话时框中,将 AreYourSureDialogueBoxIsVisible 指定为“true”,并通过 DelegateCommand 返回到我的 ViewModel 中处理这两个按钮。
我还可以尝试使用 XAML 中的触发器来处理此问题,以便“删除”按钮实际上只是使某些 Border 元素与其中的消息和按钮一起出现,而"is"按钮则执行实际删除操作。
这两种解决方案似乎都太复杂了,对于以前使用 MessageBox.Show() 的几行代码来说。
您通过哪些方式在 MVVM 应用程序中成功实现了对话框?
最佳答案
救援服务。使用Onyx (免责声明,我是作者)这很简单:
public void Foo()
{
IDisplayMessage dm = this.View.GetService<IDisplayMessage>();
dm.Show("Hello, world!");
}
在正在运行的应用程序中,这将间接调用 MessageBox.Show("Hello, world!")。测试时,可以模拟 IDisplayMessage 服务并将其提供给 ViewModel 来执行您在测试期间想要完成的任务。
关于wpf - 您是如何在 MVVM 中成功实现 MessageBox.Show() 功能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1098023/