如何阻止ValidatesOnNotifyDataErrors过于活跃

本文关键字:活跃 于活跃 何阻止 ValidatesOnNotifyDataErrors | 更新日期: 2023-09-27 18:13:57

在我的应用程序中,我使用" validatesonnotifydataerrors "以及" DataAnnotations ",以便用户被警告,如果他们正在编辑的字段是空的或有错误的数据等。我的问题是,当我的视图显示时,所有的文本框都显示警告,因为它们是空的。我想做的是,只有当用户开始在该字段中输入不正确的数据时,或者当他们删除数据并且字段变为空时,才显示警告。

这是我的一个文本框的xaml:

    <TextBox Text="{Binding Path=AttributeName, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=true}" />

下面是后台属性:

    private string _attributeName;
    [StringLength(128)]
    [Required(ErrorMessage = "Field cannot be blank")]
    public string AttributeName
    {
        get { return _attributeName; }
        set
        {
            _attributeName = value;
            IsDirty = true;
            OnPropertyChanged("AttributeName");
        }
    }

我想做的是可能与这个框架?

如何阻止ValidatesOnNotifyDataErrors过于活跃

如果您希望文本框不立即显示验证,请删除;

[Required(ErrorMessage = "Field cannot be blank")]

然后包含一个正则表达式,如下所示;

[RegularExpression(@"^[a-zA-Z''-''s]{1,128}$", ErrorMessage = "AttributeName must contain no more then 128 characters and contain no digits.")]
public string AttributeName
{
    get { return _attributeName; }
    set
    {
        _attributeName = value;
        IsDirty = true;
        OnPropertyChanged("AttributeName");
    }
}

然后,在正则表达式中,您可以添加或删除某些方面,以便文本框不允许数字,符号等。

正如你注意到的,你可以添加一个字符串的范围来包含,比如{1,128}(从1个字母到128,之后它将在文本框上显示为红色),所以理论上,你也不需要包括[StringLength(128)]

查看这个链接了解更多关于数据注释/属性验证的信息。再看看这个链接