2015-06-22 2 views
1

У меня возникли проблемы с подтверждением номеров телефонов. В нашей системе у нас есть два номера телефонов, которые вы можете сохранить. Проблема, с которой я сталкиваюсь, заключается в том, что это необязательные поля. Поэтому я хочу, чтобы он подтвердил номер телефона IF и только если пользователь попытался ввести там номер телефона. Если нет, его можно оставить пустым.Подтвердить поле, только если оно заполнено

Я использую атрибут Phone и задал 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, который мы используем. Мы используем свойства ValidatesOnDataError и NotifyOnValidationError в WPF. Извините, я полностью забыл добавить WPF – Keithin8a

ответ

2

Вы можете реализовать свой OptionalPhoneAttribute на основе оригинальной PhoneAttribute:

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

Для кого-то, интересующегося второй частью моего вопроса. Я достиг этого, используя атрибут CustomValidation на моем ViewModel, который позволил мне проверить, что число присутствовало, если и только если флажок установлен. Спасибо за вашу помощь, это было действительно приятное решение – Keithin8a

Смежные вопросы