2015-09-08 57 views
0

我有一個文本框,其Text屬性綁定到視圖模型中的整數屬性。如果用戶輸入的文本是整數,WPF會自動進行驗證。這個功能對我來說很好,所以我不需要構建額外的驗證。視圖模型中驗證錯誤的意識

現在我有一個按鈕,其Command屬性綁定到相同視圖模型中的命令,並且如果有任何驗證錯誤,我希望CanExecute該命令的方法返回false。

在視圖模型中是否有可能知道是否存在任何驗證錯誤?

+0

最簡單的把整數屬性設爲可空'int?'然後檢查HasValue中是否可以執行 – cleftheris

+1

http://stackoverflow.com/questions/30025757/inotifydataerrorinfo-and-binding-exceptions/30030623#30030623 – blindmeis

+0

你會必須使用^或添加代碼並告訴我們如何實現整數屬性的驗證。 'int?'可能無法正常工作,因爲如果無效,您的驗證可能不會更新您的支持屬性。 – Kcvin

回答

1

我想提出這樣的:

  • 布爾HasErrors屬性添加到您的視圖模型。
  • 我你的財產setter方法:撥打你的 視圖模型一個(或多個)自定義的驗證方法(然後通知屬性更改)
  • 在驗證方法(S):在HasErrors屬性設置爲true 是否有錯誤或者如果沒有錯誤,則將其設置爲false。
  • 在你CanExecute方法:檢查HasErrors財產


此步驟實現INotifyDataErrorInfo界面的上方至簡體版本(見this文章),將其引入.NET 4.5。

如果你喜歡,你也可以完全實現這個接口,如鏈接文章所述,但我認爲這比你需要的更多。

使用INotifyDataErrorInfo您可以爲每個屬性設置和檢索錯誤列表,但這似乎不是您的情況的要求,這就是爲什麼我只提供了一個更簡單的示例,只有一個標誌HasErrors