【问题标题】:Databinding to model, with custom validation attributes - when to bind & validate?数据绑定到模型,具有自定义验证属性 - 何时绑定和验证?
【发布时间】:2012-12-08 13:34:39
【问题描述】:

我对 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(...) 中手动触发它 - 但付出这么多额外的努力和首先击败了一半的数据绑定点。

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

【问题讨论】:

标签: c# winforms data-binding


【解决方案1】:

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

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

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

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

【讨论】:

  • 您先生,真是个天才。尚克什
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多