2

我对 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 回答 1

0

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

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

值是否已在模型中实际设置并不重要,不是吗?那这个呢:

ValidationContext vc = new ValidationContext(myEntity, null, null);
vc.MemberName = "myProperty";
Boolean isValid = Validator.TryValidateProperty(formPropertyValue, vc, null);
于 2012-12-21T01:54:16.757 回答