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?
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With