[英]WPF Command and exception in ViewModel
按鈕在 ViewModel 中有一個Command
綁定(它在ViewModel
中運行一些Save
方法)。 方法Save
可能會失敗並引發異常。
如何捕獲這些異常的最佳實踐是什么? 顯示一個MessageBox
就足夠了,但我不想在ViewModel
中這樣做(這不是正確的方法)。
1 - 我不相信這是“不正確的方式”。
在ViewModel
中引發Exception
通常是ViewModel
邏輯的一部分。 因此,顯示MessageBox
不會是“壞方法”。 請記住,MVVM 的實際目的不是消除所有代碼隱藏,而是實際上將 UI 邏輯和業務邏輯明確分開。 處理業務對象時會發生異常——你可以在ViewModel
中處理
2 - 無論如何,如果您想堅持這種方法(我會將其定性為極端主義 MVVM - 呵呵 -),您可以:
Binding.ValidationRules
嗎?如果沒有,這篇文章應該對您有用)以確保輸入的數據不會創建Exception
Exception
,請定義特定的返回值,即。 Trigger
,如果您碰巧輸入了 catch,您將返回一個特定的錯誤值,UI 會將其視為錯誤(例如,如果此特定錯誤值已回來)無論如何,我認為有很多人想要通過消除所有可能的代碼隱藏並引入復雜模式(例如附加行為......)來應用“極端主義 MVVM”,只是為了遵循一個實際上是胡說八道的要求我的意見。 我不會說我是絕對正確的,但我更願意將 MVVM 視為一種模式,它可以簡化我的編碼方式,而不是一種會給我帶來很多基本事物痛苦的模式(例如,我見過人們實現 AttachedBehaviors對於一個簡單的 DoubleClick 操作。我個人在觸發 DoubleClick 事件時向我的 MVVM 添加了一個 EventHandler 觸發 DoubleClick 命令。針對 100 行 class + XAML 代碼的 1 行代碼用於另一種方法,選擇你的一方。我相信一個簡單的問題應該有一個簡單的解決方案)
干杯!
為什么你認為它不是顯示消息框的正確方式? 視圖模型單元測試的原因? 如果那是您的問題,只需編寫一個您在 vm 中使用的 IMessageBoxService。
這篇文章展示了如何創建對話服務。 所以你必須稍微改進一下才能得到你想要的messageboxservice。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.