2011-04-05 58 views
0

我有使用MVVM模式的WP7應用程序。當用戶在應用程序中從一個頁面跳轉到另一個頁面時,我必須調用WCF服務來獲取數據。MVVM:服務調用失敗時怎麼辦

這工作都很好。但是當服務呼叫失敗時,我該怎麼辦?

現在我在視圖模型裏面做了一個MessageBox.Show("Some error message.");,但是不應該在視圖內完成這個操作嗎?我將如何做到這一點?用數據綁定?怎麼樣?

我還想導航回到如果服務呼叫失敗:

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

但我將如何實現這與MVVM視圖裏面?

回答

0

我使用Caliburn Micro MVVM框架,可以通過以下方式處理這些問題。

視圖模型的通知可以通過多種不同的方式完成,如果您在CM中使用Coroutines,那麼您可以創建一個NotificationResult,它與View Model分別進行交互。另一種方法是在視圖中將某種Notification Source視圖模型綁定到Notification控件。我在Windows Phone 7 Notification Control有一些這種方法的示例代碼。

再次在CM框架中有一個INavigationService接口,您可以將其聲明爲您的視圖模型的依賴關係,並通過它進行導航。這樣做的好處是它全部是單元可測試的。

+0

謝謝,您的「通知控制」幫助了我很多! – 2011-04-06 11:44:21

1

我是Catel的開發人員之一,這是一個開源的MVVM框架。我們支持包含服務的真實和測試實施的多種服務。這樣,如果你需要顯示一個消息框,你可以這樣做:

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

當然,在這個服務的單元測試的版本,沒有實際的消息框將被顯示,但可以添加預期效果所以你可以實際測試一個用戶回答OK或取消。

同爲導航服務:

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

在我看來,這是你需要去的方式,像Caliburn.Micro和Catel良好的框架支持這個開箱即用。