MVVM Exception Handling

人盡茶涼 提交于 2019-12-03 00:04:37
Kent Boogaart

Use a service:

public void SomeMethodInYourViewModel()
{
    try
    {
        DoSomethingDangerous();
    }
    catch (Exception ex)
    {
        ServiceLocator.Resolve<IMessageService>().ShowMessage(ex.Message);
    }
}

You have now decoupled your VMs from the presentation of messages. You may even decide not to use the standard (ugly) message boxes at all and that won't affect your VMs.

Have a look at Josh Smith's excellent MVVM Foundation on Codeplex. Specifically, have a look at the Messenger class, a lightweight way of passing messages between various ViewModel objects who do not need to be aware of each other.

Also, I don't believe there is a hard-and-fast rule on "No code in the View", although it's best to be avoided if possible... remember that your XAML is simply .net code written in a declarative syntax; the code-behind is just C# or VB.net to supplement that (if absolutely necessary!)

You might also like to just put an ErrorMessage string property on your ViewModel class that your View can bind to.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!