Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MessageBox in ViewModel

I use in my app mvvm light toolkit. I want to use messageboxes from my viewmodels. So: Can I register Messenger.Default.Register() in App.xaml.cs? It have to be registered for all viewmodels. I don't wanna register it in every ViewModel. And Can I call Messenger.Default.Unregister() in Deactivated or Closing event?

Thanks

like image 708
JuP Avatar asked Sep 13 '26 07:09

JuP


1 Answers

One possible approach for MVVM and messageboxes is a simple event mechanism:

public class MessageBoxDisplayEventArgs : EventArgs
{
    public string Title { get; set; }

    // Other properties here...
}
...
public class ViewModelBase
{
    public event EventHandler<MessageBoxDisplayEventArgs> MessageBoxDisplayRequested;

    protected void OnMessageBoxDisplayRequest(string title)
    {
        if (this.MessageBoxDisplayRequested != null)
        {
            this.MessageBoxDisplayRequested(
                this, 
                new MessageBoxDisplayEventArgs
                {
                    Title = title
                });
        }
    }
}
...
public class YourViewModel : ViewModelBase
{
    private void SomeMethod()
    {
        this.OnMessageBoxDisplayRequest("hello world");
    }
}
...
public class YourView
{
    public YourView()
    {
        var vm = new YourViewModel();
        this.Datacontext = vm;

        vm.MessageBoxDisplayRequested += (sender, e) =>
        {
            // UI logic here
            //MessageBox.Show(e.Title);
        };
    }
}
like image 135
ken2k Avatar answered Sep 14 '26 21:09

ken2k