2010-12-05 159 views
9

作爲一個新的WPF程序設計師,我不能找到兩個不同的方式之間的區別,以驗證用戶輸入:驗證在WPF - 自定義的驗證規則或IDataErrorInfo的

什麼是對實施IDataErrorInfo的編寫自定義的驗證規則的利弊,反之亦然?什麼時候我比較喜歡一個人?

更新:

雖然我得到了我的答案了,我發現related article,可以幫助別人。

回答

20

基本上,如果你實現IDataErrorInfo,驗證是在綁定對象中實現的,而如果你實現了驗證規則,驗證是在綁定的對象中實現的。個人而言,如果您使用的是MVVM,我認爲您必須瘋狂才能使用除IDataErrorInfo之外的其他任何內容。你想要驗證住在視圖模型。如果它在你的視圖模型中,它是集中的並且是可測試的。如果它在您的視圖中,那麼您的驗證邏輯可能是錯誤的或丟失的,並且唯一的方法是通過手動測試您的視圖來找到它。這是一個可避免的bug的巨大潛在來源。

有些地方使用驗證規則是有意義的 - 例如,如果您正在圍繞啞對象構建UI(例如XmlDataSource)。但對於大多數生產應用,我不會靠近它。

+0

非常豐富,非常感謝! – 2010-12-06 08:32:11

-1

您實現了IDataErrorInfo以便能夠使用eas與databinding。您仍然構建自定義驗證規則。

+0

我不知道我完全理解你的答案:我可以實現IDataErrorInfo,或從ValidationRule繼承並重寫'Validate'方法......我沒有同時使用它們。我錯了嗎? – 2010-12-05 13:27:00

1

IDataErrorInfo的

  • 驗證邏輯保持視圖模型,易於實現和維護
  • 完全控制在視圖模型所有領域

驗證規則

  • 在單獨的類中維護驗證規則
  • 提高可重用性。例如,您可以實現所需的字段 驗證類在整個應用程序中重用它。

我的意見是,對於常見驗證,如需要的字段驗證,電子郵件地址驗證您可以使用驗證規則。如果您需要執行自定義驗證(如範圍驗證),或者使用IDataerrorinfo進行自定義驗證。