2015-06-22 42 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