9

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

4

2 回答 2

27

有一个接口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根据您的需要自定义界面,并选择更好的名称。

于 2013-01-12T20:27:11.447 回答
2

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

为此,您将需要一个 Bool To Visibility 转换器。

有关使用内置转换器的信息,请参见此处: Binding a Button's visibility to a bool value in ViewModel

于 2013-01-12T20:01:50.967 回答