按鈕具有Command
綁定到ViewModel
(它在ViewModel中運行一些Save
方法)。方法Save
可能會失敗並引發異常。WPF CommandModel中的命令和例外
如何捕捉這些異常情況的最佳做法是什麼?顯示MessageBox
就足夠了,但我不想在ViewModel
中這樣做(這不是正確的方法)。
按鈕具有Command
綁定到ViewModel
(它在ViewModel中運行一些Save
方法)。方法Save
可能會失敗並引發異常。WPF CommandModel中的命令和例外
如何捕捉這些異常情況的最佳做法是什麼?顯示MessageBox
就足夠了,但我不想在ViewModel
中這樣做(這不是正確的方法)。
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代碼,選擇您的身邊。一個簡單的問題應該有一個簡單的解決方案)
乾杯!
爲什麼你認爲它不是顯示消息框的正確方法?視圖模型的單元測試的原因是什麼?如果這就是你的問題,只需寫一個你在vm中使用的IMessageBoxService。
此post顯示瞭如何創建對話服務。所以你必須改進它以獲得你想要的messageboxservice。
如果有消息框顯示,你如何自動測試你的'ViewModel'? – Maxence 2016-12-28 13:38:03