.net MVVM:当服务调用失败时该怎么办

.net MVVM:当服务调用失败时该怎么办,.net,silverlight,windows-phone-7,mvvm,.net,Silverlight,Windows Phone 7,Mvvm,我有一个使用MVVM模式的WP7应用程序。当用户在应用程序中从一页转到另一页时,我必须调用WCF服务来获取数据 这一切都很好。但是,当服务调用失败时,我该怎么办 现在我做了一个MessageBox.Show(“一些错误消息”)在视图模型中,但这不应该在视图中进行吗?我该怎么做?用数据绑定?怎么做 如果服务调用失败,我还想返回: if ( NavigationService.CanGoBack ) { NavigationService.GoBack(); } 但是我如何在MVVM视图中实现这一

我有一个使用MVVM模式的WP7应用程序。当用户在应用程序中从一页转到另一页时,我必须调用WCF服务来获取数据

这一切都很好。但是,当服务调用失败时,我该怎么办

现在我做了一个
MessageBox.Show(“一些错误消息”)在视图模型中,但这不应该在视图中进行吗?我该怎么做?用数据绑定?怎么做

如果服务调用失败,我还想返回:

if ( NavigationService.CanGoBack ) { NavigationService.GoBack(); }

但是我如何在MVVM视图中实现这一点呢

我使用Caliburn Micro MVVM框架,您可以通过以下方式处理这些问题

来自视图模型的通知可以通过多种不同的方式完成,如果您在CM中使用协同路由,那么您可以创建一个NotificationResult,该NotificationResult与视图模型单独交互。另一种方法是使用某种通知源视图模型,该模型绑定到视图中的通知控件。我有一些关于这种方法的示例代码


在CM框架中,还有一个INavigationService接口,您可以将其声明为视图模型的依赖项,并通过它进行导航。这样做的好处是它都是可单元测试的。

我是Catel的开发人员之一,Catel是一个开源MVVM框架。我们支持多个服务,这些服务包含服务的真实实现和测试实现。这样,如果需要显示消息框,可以执行以下操作:

var messageService = GetService<IMessageService>();
messageService.Show("This is a message");
var messageService=GetService();
Show(“这是一条消息”);
当然,在该服务的单元测试版本中,不会显示实际的消息框,但是您可以添加预期的结果,这样您就可以实际测试回答“确定”或“取消”的用户

导航服务也是如此:

var navigationService = GetService<INavigationService>();
navigationService.Navigate("/UI/Pages/MyNewPage.xaml");
// OR
navigationService.Navigate<MyViewModel>();
var-navigationService=GetService();
navigationService.Navigate(“/UI/Pages/MyNewPage.xaml”);
//或
navigationService.Navigate();
在我看来,这是你需要走的路,像Caliburn.Micro和Catel这样的好框架支持开箱即用。

谢谢,你的“通知控制”帮了我很多忙!