簡體   English   中英

ViewModel 中的 WPF 命令和異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM