Say I want to display some validation error to the user. In the MVVM pattern, I could have a label that is bound to some property on my viewmodel. But what if I wanted to show a message box while strictly adhering to the MVVM pattern. What would my viewmodel bind to, and how would it trigger a message box to be created/displayed?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Have an interface IMessageBoxService
as:
interface IMessageBoxService
{
bool ShowMessage(string text, string caption, MessageType messageType);
}
Create a WPFMessageBoxService
class:
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);
}
}
In your ViewModel
accept IMessageBoxService as a constructor parameter and inject WPFMessageBoxService
using DI/IoC.
In the ViewModel, use IMessageBoxService.ShowMessage
to show the MessageBox.
ShowMessageCommand = new DelegateCommand (
() => messageBoxService.ShowMessage(message, header, MessageType.Information)
);
Customize IMessageBoxService
interface to your needs, and pick up a better name.
回答2:
You could bind your messagebox control's visibility to the validation.
You will need a Bool To Visibility converter for this.
See here for using the built in converter: Binding a Button's visibility to a bool value in ViewModel