如何使用WPF和MVVM显示简单消息

如何使用WPF和MVVM显示简单消息,mvvm,Mvvm,我在网上查阅了一些不同的资源,找到了一个使用MVVM和WPF的C#内部命令的简单示例。所有我 想知道的是如何在点击按钮后显示消息。我在网上找不到这么简单的东西,所以我 在这里提问。不幸的是,“简单”的事情,如在窗口中显示消息,从纯粹主义的角度来看,往往会违反MVVM,或者需要大量的代码来构建一个干净的系统 尽管如此,在大多数情况下,显示消息通常是纯粹的视图问题。因此,我通常会在视图中的代码隐藏中执行此操作。起初,这似乎违反了MVVM,但由于这是一个与“纯视图”相关的操作,在实践中并不是一个真正的

我在网上查阅了一些不同的资源,找到了一个使用MVVM和WPF的C#内部命令的简单示例。所有我 想知道的是如何在点击按钮后显示消息。我在网上找不到这么简单的东西,所以我 在这里提问。

不幸的是,“简单”的事情,如在
窗口中显示消息,从纯粹主义的角度来看,往往会违反MVVM,或者需要大量的代码来构建一个干净的系统

尽管如此,在大多数情况下,显示消息通常是纯粹的视图问题。因此,我通常会在视图中的代码隐藏中执行此操作。起初,这似乎违反了MVVM,但由于这是一个与“纯视图”相关的操作,在实践中并不是一个真正的问题。

您可以通过两种方式来实现 1.您可以在执行ICommand时在视图模型中放置一个消息框,当您单击按钮时,消息框将弹出或显示
2.您可以将消息隐藏在Xaml上,并在单击按钮时使其可见。这实际上取决于消息的性质、消息来源和显示时间。虽然可以肯定操作与视图更相关,但源代码可能来自业务逻辑,这些业务逻辑可能值得在viewmodel中进行测试

一般来说,我会从两种方法中选择一种:

  • 在构建视图模型时使用普通依赖项注入,并注入一个服务(通过其接口),该服务将负责显示所有消息。真正的实现可能很简单,只需调用
    MessageBox.Show
    或在视图级别执行更复杂的操作

  • 为视图模型提供一个要引发的事件,该事件包含其
    EventArgs
    参数中的所有消息数据。视图将订阅该事件,并根据需要显示通知

在这两种情况下,视图模型都不知道特定于视图的逻辑,但仍然能够封装业务逻辑以生成消息,并且完全可以进行单元测试