如何阻止ValidatesOnNotifyDataErrors过于活跃

时间:2013-05-16 10:08:04

标签: c# wpf validation .net-4.5

在我的应用程序中,我使用“validatesonnotifydataerrors”和“DataAnnotations”,以便在用户正在编辑的字段为空或者数据错误等时向用户发出警告。我遇到的问题是当我的视图显示时,所有文本框都显示警告,因为它们是空的。我想要做的只是当用户开始在该字段中输入错误数据时显示警告,或者然后他们删除数据并且字段变空。

这是我的一个TextBox的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");
        }
    }

我想用这个框架做什么?

1 个答案:

答案 0 :(得分:2)

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

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

然后包括RegularExpression,如下所示;

[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)]

有关数据注释/属性验证的更多信息,请查看This link。还要看This link also

希望这会有所帮助:)。