wpf - 您是如何在 MVVM 中成功实现 MessageBox.Show() 功能的?

标签 wpf mvvm triggers messagebox

我有一个 WPF 应用程序它在 ViewModel 中调用 MessageBox.Show()(以检查用户是否确实想要删除)。 这实际上有效,但是违背了 MVVM 的原则,因为 ViewModel 不应该明确确定 View 上发生的情况。

所以现在我在想如何在我的 MVVM 应用程序中最好地实现 MessageBox.Show() 功能,选项:

  1. 我可以收到一 strip 有“您确定...?”的消息吗?以及两个按钮是和否都在我的 XAML 中的边框中,并在模板上创建一个触发器,以便它基于名为 AreYourSureDialogueBoxIsVisible 的 ViewModelProperty 折叠/可见,然后当我需要此对话时框中,将 AreYourSureDialogueBoxIsVisible 指定为“true”,并通过 DelegateCommand 返回到我的 ViewModel 中处理这两个按钮。

  2. 我还可以尝试使用 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/

相关文章:

wpf - 当 FlowDirection 设置为 RightToLeft 时,为什么 CheckBox Content 中的冒号放置错误

c# - TreeView 的子节点无法反射(reflect)绑定(bind)的变化

javascript - 暂时禁用触发器

删除 SelectedItem 时 WPF DisplayMemberPath 未更新

oracle - 缺少等号和SQL语句忽略了Oracle触发器?

sql - PostgreSQL 上的简单更新触发器返回错误

C# WPF BorderBrush 不会设置颜色

wpf - 如何实现 WPF 动态 UI

c# - 如何在属性更改时触发 DataTemplateSelector?

c# - 如何在 wpf 中通过 MVVM 使用 ListView 绑定(bind)获取数据?