2012-12-20 113 views
2

我有點新的WinForms數據綁定&自定義驗證。數據綁定到模型,使用自定義驗證屬性 - 何時綁定和驗證?

說我有我的域中一個簡單的模型:

public class SecurityObject 
{ 

    [StringLength(25)] 
    public string Name { get; set; } 

    public bool HasAccess { get; set; } 
} 

Name屬性是數據綁定到一個文本框。我想要應用自定義屬性驗證,以便在違反驗證時顯示工具提示。 (注:是的,我知道我可以在文本框中設置MaximumLength屬性,並計劃,但這不是我現在的問題。)

我的問題是,應該在什麼時候觸發驗證?

  1. 似乎並不像它可以在TextBox_Validating(..)被觸發,因爲在這一點上,新的價值還沒有蜜蜂寫回模型。

  2. 它可能會在TextBox_Validated(..)處被觸發,因爲當時值已被寫回模型。然而這看起來不合適,因爲TextBox認爲它是有效的,而它綁定的模型不是 - 對我來說似乎很腥。

  3. 我想你可以禁用自動綁定,然後通過調用DataBinding.WriteValue(...)在TextBox_Validating(...)中手動觸發它 - 但這似乎是一個恥辱,去做這麼多額外的努力和失敗一半是數據綁定點。

那麼,在數據綁定時運行模型驗證的推薦方法是什麼?

+1

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

好的謝謝。下次還會記得 –

回答

0

IMO驗證事件是驗證應該發生的地方。

看起來好像不能在TextBox_Validating(..)中觸發它,因爲那時新值沒有被寫回模型。

如果該值已在模型中實際設置,則無關緊要嗎?這個怎麼樣:

ValidationContext vc = new ValidationContext(myEntity, null, null); 
vc.MemberName = "myProperty"; 
Boolean isValid = Validator.TryValidateProperty(formPropertyValue, vc, null); 
+0

你先生,是個天才。 Shanksh –