所以我有一个 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/