c# - 使用 Regex 的 DataValidation 不起作用

标签 c# regex wpf xaml validation

所以我有一个 MaskedTextInput 框,如下所示:

<telerik:RadMaskedTextInput Margin="2" BorderBrush="LightGray"
                            IsClearButtonVisible="False"
                            Mask="(###) ###-####"
                            UpdateValueEvent="PropertyChanged"
                            TextMode="PlainText"
                            Value="{Binding Path=PhoneNumber, 
                                            Mode=TwoWay, 
                                            NotifyOnValidationError=True, 
                                            ValidatesOnExceptions=True,
                                            UpdateSourceTrigger=PropertyChanged}" />

它通过带有以下代码隐藏的 ViewModel 绑定(bind):

//Phone Number
[Required(AllowEmptyStrings = false, ErrorMessage = @"A phone number is required.")]
[RegularExpression(@"^\d{10}$", ErrorMessage = @"Invalid phone number.")]
public string PhoneNumber
{
    get { return _phoneNumber; }
    set
    {
        if (_phoneNumber!= value)
        {
            Validator.ValidateProperty(value, 
                new ValidationContext(this, null, null)
                {
                    MemberName = "PhoneNumber"
                });
            _phoneNumber = value;
            OnPropertyChanged("PhoneNumber");
        }
    }
}

我正在尝试做的是,当用户出现 10 位数字以外的任何数字时抛出异常,导致边框变为红色。

它适用于电子邮件地址等其他字段,但由于某些原因它不适用于设置了掩码的电话号码字段。

最佳答案

根据 documentation从 telerik 你需要在你的 set 语句中抛出一个异常。

set
{
    if (_phoneNumber!= value)
    {
        // Do the validation and throw an validation exception.
        if(/*validation statements*/)
        {
          throw new ValidationException("........Error message..........");
        }
        _phoneNumber = value;
        OnPropertyChanged("PhoneNumber");
    }
}

关于c# - 使用 Regex 的 DataValidation 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30537288/

相关文章:

c# - 文本框是否将全数字文本保存为长文本或字符串?

python - 正则表达式非 ASCII 字符

php - 用正则表达式更改 iframe src

c# - 按住右键单击与 Manipulation 事件冲突

wpf - 如何在WPF中的ListBox中编写 "Selection Changing"事件?

c# - 尚未为数据源 'DataSet1' 提供数据源实例

c# - 如何从驱动器全名获取驱动器号

c# - 在 Dapper 中使用 Protocol Buffer 模型时如何将 C# ticks 映射到 PostgreSQL 时间戳?

regex - 根据 perl 数组评估输入的邮政编码

wpf - 如何构建一个 Windows 应用程序来拦截击键和鼠标点击并将其传递给其他应用程序?