带有MVVM模式的WPF消息框

本文关键字:消息 WPF MVVM 模式 带有 | 更新日期: 2023-09-27 17:53:05

假设我想向用户显示一些验证错误。在MVVM模式中,我可以有一个绑定到视图模型上的某些属性的标签。但是,如果我想在严格遵守MVVM模式的情况下显示消息框,该怎么办呢?我的视图模型将绑定到什么,以及它将如何触发创建/显示消息框?

带有MVVM模式的WPF消息框

设置接口IMessageBoxService为:

interface IMessageBoxService
{
    bool ShowMessage(string text, string caption, MessageType messageType);
}

创建WPFMessageBoxService类:

using System.Windows;
class WPFMessageBoxService : IMessageBoxService
{
    bool ShowMessage(string text, string caption, MessageType messageType)
    {
        // TODO: Choose MessageBoxButton and MessageBoxImage based on MessageType received
        MessageBox.Show(text, caption, MessageBoxButton.OK, MessageBoxImage.Information);
    }
}

在你的ViewModel接受IMessageBoxService作为一个构造函数参数,并注入WPFMessageBoxService使用DI/IoC。

在ViewModel中,使用IMessageBoxService.ShowMessage来显示MessageBox。

ShowMessageCommand = new DelegateCommand (
    () => messageBoxService.ShowMessage(message, header, MessageType.Information)
);

根据您的需要定制IMessageBoxService接口,并选择一个更好的名称

您可以将消息框控件的可见性绑定到验证。

你需要一个Bool To Visibility转换器。

查看这里使用内置转换器:将Button's可见度绑定到ViewModel中的bool值