【发布时间】:2012-12-27 03:58:19
【问题描述】:
假设我想向用户显示一些验证错误。在 MVVM 模式中,我可以有一个绑定到我的视图模型上的某个属性的标签。但是,如果我想在严格遵守 MVVM 模式的同时显示一个消息框怎么办。我的视图模型将绑定到什么,以及它如何触发创建/显示的消息框?
【问题讨论】:
标签: c# .net wpf mvvm messagebox
假设我想向用户显示一些验证错误。在 MVVM 模式中,我可以有一个绑定到我的视图模型上的某个属性的标签。但是,如果我想在严格遵守 MVVM 模式的同时显示一个消息框怎么办。我的视图模型将绑定到什么,以及它如何触发创建/显示的消息框?
【问题讨论】:
标签: c# .net wpf mvvm messagebox
有一个接口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 界面,并选择更好的名称。
【讨论】:
Delegate 'System.Predicate<object>' does not take 0 arguments () => messageBoxService.ShowMessage(message, header, MessageType.Information);
您可以将消息框控件的可见性绑定到验证。
为此,您需要一个 Bool To Visibility 转换器。
请参阅此处了解如何使用内置转换器: Binding a Button's visibility to a bool value in ViewModel
【讨论】: