2011-06-01 41 views
5

按鈕具有Command綁定到ViewModel(它在ViewModel中運行一些Save方法)。方法Save可能會失敗並引發異常。WPF CommandModel中的命令和例外

如何捕捉這些異常情況的最佳做法是什麼?顯示MessageBox就足夠了,但我不想在ViewModel中這樣做(這不是正確的方法)。

回答

6

1 - 我不認爲這是「不正確的方式」。

ViewModel中產生的Exception通常是ViewModel邏輯的一部分。因此,顯示MessageBox不會有「不好的方式」。 請記住,MVVM的實際目標是不是,以消除所有代碼隱藏,但實際上是清楚地分離UI邏輯和業務邏輯。處理業務對象時會發生異常 - 您可以在ViewModel

中處理它 - 無論如何,如果您想堅持這種方法(我將它定義爲極端主義MVVM--嘿),您可以:

  • 使用驗證器(有你聽說過Binding.ValidationRules?如果不是,this article should be useful for you),以確保進入不會創建Exception
  • 定義特定的返回值,如果Exception情況發生,即數據。 try-catch,如果你碰巧輸入catch,你會返回一個特定的錯誤值,這將被用戶界面視爲一個錯誤(例如,你可以使用Trigger爲紅色字段着色,如果這個特定的錯誤值已退還)

反正我又覺得有很多的人誰希望通過消除所有可能的代碼隱藏,並引入複雜的圖案(例如附加行爲適用的「極端MVVM」 ......)只是爲了遵循我認爲實際上是無稽之談的要求。我不會說我是絕對正確的,但我更喜歡將MVVM看作是一種模式,它將簡化我的編碼方式,而不是一種模式,它會給我帶來如此多的基本事情痛苦(例如,我見過人們實現AttachedBehaviors對於一個簡單的DoubleClick動作,我個人添加了一個EventHandler,當DoubleClick事件被觸發時,將DoubleClick命令發送到我的MVVM中,1行代碼針對另一種方法的100行類+ XAML代碼,選擇您的身邊。一個簡單的問題應該有一個簡單的解決方案)

乾杯!

+1

如果有消息框顯示,你如何自動測試你的'ViewModel'? – Maxence 2016-12-28 13:38:03

6

爲什麼你認爲它不是顯示消息框的正確方法?視圖模型的單元測試的原因是什麼?如果這就是你的問題,只需寫一個你在vm中使用的IMessageBoxService。

post顯示瞭如何創建對話服務。所以你必須改進它以獲得你想要的messageboxservice。