Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据绑定到模型,具有自定义验证属性-何时绑定&;验证_C#_Winforms_Data Binding - Fatal编程技术网

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

C# 数据绑定到模型,具有自定义验证属性-何时绑定&;验证,c#,winforms,data-binding,C#,Winforms,Data Binding,我对WinForms数据绑定和自定义验证有点陌生 假设我的领域中有一个简单的模型: public class SecurityObject { [StringLength(25)] public string Name { get; set; } public bool HasAccess { get; set; } } Name属性是绑定到文本框的数据。我希望应用自定义属性验证,以便在违反验证时显示工具提示。(注意:是的,我知道我可以在文本框上设置MaximumL

我对WinForms数据绑定和自定义验证有点陌生

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

public class SecurityObject
{

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

    public bool HasAccess { get; set; }
}
Name属性是绑定到文本框的数据。我希望应用自定义属性验证,以便在违反验证时显示工具提示。(注意:是的,我知道我可以在文本框上设置MaximumLength属性,并计划设置,但这不是我现在的问题。)

我的问题是,验证应该在什么时候触发

  • 似乎无法在TextBox_Validating(..)中触发,因为此时,新值尚未写入模型

  • 它可能在TextBox_Validated(..)处触发,因为此时该值已写回模型。然而,这似乎不合适,因为文本框认为它是有效的,而它绑定的模型对我来说似乎是可疑的

  • 我想您可以禁用自动绑定,然后在TextBox_Validating(…)中通过调用DataBinding.WriteValue(…)手动触发它-但这似乎是一个耻辱,因为您付出了如此多的额外努力,并在一开始就破坏了数据绑定的一半


  • 那么,当数据绑定时,建议使用什么方法来运行模型验证呢?

    在我看来,验证事件就是应该进行验证的地方

    似乎无法在TextBox_Validating(..)中触发,因为此时,新值尚未写入模型

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

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

    我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。好的,谢谢。下次你会记得的,先生,你是个天才。尚克斯