所以我有一个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绑定以下代码隐藏:
//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位数以外的任何内容时抛出异常导致边框变红。
它适用于其他字段,例如电子邮件地址,但由于某种原因,它不适用于带有掩码设置的电话号码字段。
答案 0 :(得分:0)
根据telerik的documentation,您需要在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");
}
}
答案 1 :(得分:0)
要实现所需的响应,我需要将MaskedTextInput的AllowInvalidValues
属性设置为true:
<telerik:RadMaskedTextInput AllowInvalidValues="True" .../>
这确保即使DataAnnotaion Validation不成功也会触发属性的Setter - 在我的情况下,当用户开始输入直到他们输入所有10位数字时,将显示错误消息。