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

时间:2011-04-05 07:32:32

标签: .net silverlight windows-phone-7 mvvm

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

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

现在我在视图模型中做了一个MessageBox.Show("Some error message.");,但不应该在视图中以某种方式完成吗?我该怎么做?使用数据绑定?怎么样?

如果服务调用失败,我还想导航回来:

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

但是我如何在MVVM视图中实现这个呢?

2 个答案:

答案 0 :(得分:1)

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

var messageService = GetService<IMessageService>();
messageService.Show("This is a message");

当然,在此服务的单元测试版本中,不会显示实际的消息框,但您可以添加预期的结果,这样您就可以实际测试用户正常或取消。

导航服务相同:

var navigationService = GetService<INavigationService>();
navigationService.Navigate("/UI/Pages/MyNewPage.xaml");
// OR
navigationService.Navigate<MyViewModel>();

在我看来,这是你需要的方式,像Caliburn.Micro和Catel这样的优秀框架支持开箱即用。

答案 1 :(得分:0)

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

视图模型中的通知可以通过多种不同方式完成,如果您在CM中使用Coroutines,则可以创建与视图模型分开交互的NotificationResult。另一种方法是使某种Notification Source视图模型绑定到View中的Notification控件。我在Windows Phone 7 Notification Control处有一些此方法的示例代码。

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

相关问题