数据绑定到模型,具有自定义验证属性 - 何时绑定&验证?

时间:2012-12-20 23:35:50

标签: c# winforms data-binding

我对WinForms数据绑定和新功能有点新鲜。自定义验证。

假设我的域名中有一个简单的模型:

public class SecurityObject
{

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

    public bool HasAccess { get; set; }
}

Name属性是绑定到TextBox的数据。我想应用自定义属性验证,以便在违反验证时显示工具提示。 (注意:是的,我知道我可以在文本框中设置MaximumLength属性,并计划,但这不是我现在的问题。)

我的问题是,应该在何时触发验证?

  1. 似乎不能在TextBox_Validating(..)中触发,因为此时新值不会被写回模型。

  2. 可以在TextBox_Validated(..)处触发,因为此时该值已写回模型。然而,这似乎不合适,因为TextBox认为它是有效的,而它所绑定的模型不是 - 对我来说似乎很可疑。

  3. 我猜你可以禁用自动绑定,然后通过调用DataBinding.WriteValue(...)在TextBox_Validating(...)中手动触发它 - 但这似乎是一件很遗憾的事情。首先打败了数据绑定的一半。

  4. 那么,在数据绑定时运行模型验证的推荐方法是什么?

1 个答案:

答案 0 :(得分:0)

IMO验证事件是应该进行验证的地方。

  

似乎不能在TextBox_Validating(..)中触发,因为此时新值不会被写回模型。

如果在模型中实际设置了值,这无关紧要吗?那怎么样:

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