带MVVM模式的WPF MessageBox?

时间:2013-01-12 19:52:14

标签: c# .net wpf mvvm messagebox

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

2 个答案:

答案 0 :(得分:22)

将界面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作为构造函数参数,并使用DI / IoC注入WPFMessageBoxService

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

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

根据您的需求自定义IMessageBoxService界面,并选择更好的名称。

答案 1 :(得分:2)

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

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

请参阅此处以了解如何使用内置转换器: Binding a Button's visibility to a bool value in ViewModel