如何在MVVM中使用Messagebox?

时间:2010-05-21 13:40:49

标签: unit-testing testing mvvm messagebox

似乎MVVM模式中的XAML难以弹出Messageboxes。我的客户坚持认证标签和颜色不适合他们。他们仍然想要一个消息框。怎么办?

我知道我可以在视图模型中弹出消息框,但它违反了视图模型的整个目的。我也可以引发错误,并在一些异常处理程序中弹出一个消息框,但消息框也不例外。这是正常计划流程的一部分。

在XAML中有一个很好的方法吗?我的客户喜欢留言箱。她不关心MVVM模式,在使用MVVM和单元测试之前,她从未遇到任何质量问题。但现在,她甚至无法收到她的留言箱,所以她不是很开心。

5 个答案:

答案 0 :(得分:2)

一种可能性是使用消息框的接口,如

public interface IMessageBoxProvider
{
    MessageBoxResult Show(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult);

}

和一个实现此接口并使用普通或自定义消息框的包装类。 在viewmodel中,您可以像这样使用

private IMessageBoxProvider MessageBox { get; set; }

其中MessageBox是包装类。所以现在你已经解耦了实际的消息框,因此你可以进行单元测试,而不是。

答案 1 :(得分:2)

Josh Smith还有一篇您感兴趣的CodeProject文章here

答案 2 :(得分:1)

您可以在ViewModel中有一个PopUpNotificationRequested事件,该事件将由View to show消息框处理。这样,显示消息框的逻辑将保留在viewmodel中,但仍然与视图分离。

答案 3 :(得分:1)

WPF Application Framework (WAF) 项目的ViewModel示例应用程序显示了如何在不违反MVVM模式的情况下显示MessageBox。

答案 4 :(得分:0)

几周前我遇到了这个问题。我看到了这篇文章(http://blog.roboblob.com/2010/01/19/modal-dialogs-with-mvvm-and-silverlight-4/),并且基本上遵循了一个非常类似的过程,用于显示MVVM模式的模态对话框。为了测试我的ViewModel,只需创建一个模拟模式对话框服务。我希望这对你也有帮助。