2015-05-15 45 views
1

我想從我的輸入控件中得到任何驗證錯誤。從WPF控件獲取任何驗證錯誤

到目前爲止,我有幾個viewmodels全部實現了ValidationViewModel,它實現了ViewModelBaseINotifyDataErrorInfoViewModelBase執行INotifyPropertyChanged。看看this link我從哪裏得到驗證想法。他和我的驗證模型基本相同,但我的分爲兩部分。

根據設計,任何屬性更改都將觸發propertychanged事件,ValidationViewModel會偵聽並執行所有自定義驗證。這很好,很好。

這裏的問題是驗證只發生在屬性發生變化的情況下......但根據這一點,優秀的article綁定引擎執行驗證規則並嘗試在屬性設置之前進行類型轉換,我的驗證火。

想象一下,一個文本框綁定到一個整數,用戶輸入'a'作爲示例。然後,我剩下一個紅色的邊框。我怎樣才能在這個控件上捕獲任何類型的驗證錯誤?自定義和默認。

我的目標是有一個保存按鈕,在我的視圖模型中任何一種錯誤都被禁用。

回答

0

您已將視圖與視圖模型分開。類型轉換綁定錯誤純粹是在視圖方面。

您可以使用Validation.Error附加路由事件捕捉任何約束力的錯誤,但你必須在綁定集設置NotifyOnValidationError爲true

https://msdn.microsoft.com/en-us/library/system.windows.controls.validation.error(v=vs.110).aspx

當綁定驗證錯誤發生時,此事件在可視化樹向上冒泡,所以你可以很容易地捕捉整個頁面,或用戶控件

您可以使用Validation.HasError和Validation.Errors附加屬性來獲取綁定錯誤。此外,如果您不是

+0

,那麼您已經熟悉了Validation.ErrorTemplate。好的,謝謝。當我有時間的時候會試一試,如果有效,請給出答案。想想我會先嚐試冒泡,只需要找到漂亮的方式來實現它。 – smok

+0

基本上,要禁用該按鈕,請在CanExecute方法調用'Validating'事件中。在你的視圖中,設置'EventArgs.IsValid = Validation.GetHasError(this)'。 – Liero