我对WinForms数据绑定和新功能有点新鲜。自定义验证。
假设我的域名中有一个简单的模型:
public class SecurityObject
{
[StringLength(25)]
public string Name { get; set; }
public bool HasAccess { get; set; }
}
Name属性是绑定到TextBox的数据。我想应用自定义属性验证,以便在违反验证时显示工具提示。 (注意:是的,我知道我可以在文本框中设置MaximumLength属性,并计划,但这不是我现在的问题。)
我的问题是,应该在何时触发验证?
似乎不能在TextBox_Validating(..)中触发,因为此时新值不会被写回模型。
可以在TextBox_Validated(..)处触发,因为此时该值已写回模型。然而,这似乎不合适,因为TextBox认为它是有效的,而它所绑定的模型不是 - 对我来说似乎很可疑。
我猜你可以禁用自动绑定,然后通过调用DataBinding.WriteValue(...)在TextBox_Validating(...)中手动触发它 - 但这似乎是一件很遗憾的事情。首先打败了数据绑定的一半。
那么,在数据绑定时运行模型验证的推荐方法是什么?
答案 0 :(得分:0)
IMO验证事件是应该进行验证的地方。
似乎不能在TextBox_Validating(..)中触发,因为此时新值不会被写回模型。
如果在模型中实际设置了值,这无关紧要吗?那怎么样:
ValidationContext vc = new ValidationContext(myEntity, null, null);
vc.MemberName = "myProperty";
Boolean isValid = Validator.TryValidateProperty(formPropertyValue, vc, null);