2015-06-22 68 views
1

我在验证电话号码时遇到问题。在我们的系统中,我们有两个可以存储的电话号码。我遇到的问题是这些是可选字段。所以我想让它验证电话号码IF,并且只有当用户试图在那里输入电话号码。如果不是,它可以留空。仅在已填充字段时验证字段

我正在使用电话属性并设置了MaxLength。我试图将MinLength设置为0,但这不起作用。

[Phone] 
    [MaxLength(24)] 
    [MinLength(0)] 
    public string PhoneNum1 
    { 
     get { return phoneNum1; } 
     set 
     { 
      if (phoneNum1 != value) 
      { 
       phoneNum1 = value; 
       RaisePropertyChanged("PhoneNum1"); 
      } 
     } 
    } 

此外,我们有一个复选框,如果勾选用户将不得不添加至少一个电话号码。我还没有尝试过,所以我在技术上不会要求解决方案,但如果有任何解决方案会记住这一点,那将是非常好的。

这是我正在使用的WPF。我使用ValidatesOnDataErrors和NotifyOnValidationError

    <TextBox Margin="0,10,0,0" Grid.Row="10" Grid.Column="2" 
         Text="{Binding PhoneNum1, Mode=TwoWay, ValidatesOnDataErrors=True, 
        NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}"/> 
+0

当你验证特定的电话文本框,在按钮点击? – Joseph

+0

@Joseph我添加了我们正在使用的WPF。我们正在使用WPF中的ValidatesOnDataError和NotifyOnValidationError属性。对不起,我完全忘了添加WPF – Keithin8a

回答

2

您可以根据实现你OptionalPhoneAttributePhoneAttribute

public sealed class OptionalPhoneAttribute : ValidationAttribute 
{   
    public override bool IsValid(object value) 
    { 
     var phone = new PhoneAttribute(); 

     //return true when the value is null or empty 
     //return original IsValid value only when value is not null or empty 
     return (value == null || string.IsNullOrEmpty(Convert.ToString(value)) || phone.IsValid(value)); 
    } 
} 

然后,你可以改用这个新属性:

[OptionalPhone] 
[MaxLength(24)] 
public string PhoneNum1 
{ 
    get { return phoneNum1; } 
    set 
    { 
     if (phoneNum1 != value) 
     { 
      phoneNum1 = value; 
      RaisePropertyChanged("PhoneNum1"); 
     } 
    } 
} 
+0

对于任何人想知道我的问题的第二部分。我通过在我的ViewModel上使用CustomValidation属性实现了这一点,该属性允许我验证数字是否存在当且仅当该复选框已被选中。感谢您的帮助,这是一个非常好的解决方案 – Keithin8a