2016-07-09 3 views
1

hej,Подтверждение ввода данных пользователя

im не уверен, как решить мою проблему. Я хочу проверить вход пользователя из моего TextBox, а затем изменить цвет моей метки, если вход неправильный. Мне нужно , чтобы проверить ввод в моих Get и Set? Или это тотально неправильно?

мой XAML код:

<Label x:Name="lblEmail" Content="Email Adress" Foreground="{Binding EmailAdressValid}"/> 
<TextBox x:Name="txtEmail" Text="{Binding EmailAdress, UpdateSourceTrigger=PropertyChanged}"/> 

Мои данные Класс:

public class MainData : INotifyPropertyChanged { 

     private int _emailAdress; 
     public int EmailAdress 
     { 
      get { return _emailAdress; } 
      set 
      { 
       _emailAdress = value; 
       OnPropertyChanged(nameof(EmailAdress)); 
      } 
     } 

     private System.Windows.Media.Brush _emailAdressValid; 
     public System.Windows.Media.Brush EmailAdressValid 
     { 
      get { return _emailAdressValid; } 
      set 
      { 
       if(_emailAdress.Contains("@")) { 
        _emailAdressValid = Brushes.Black; 
       } 
       else { 
        _emailAdressValid = Brushes.Red; 
       } 
       OnPropertyChanged(nameof(EmailAdressValid)); 
      } 
     } 
} 
+1

Переменная _emailAdress объявляется как int, а затем обрабатывается как строка (_emailAdress.Contains ("@")). В чем намерение? –

ответ

0

Используйте Control Binding функция непосредственно связать метку с текстовым полем ввода электронной почты. Затем используйте конвертер значений для проверки значения электронной почты и возврата требуемого цвета фона. Обратитесь к нижеприведенному коду для справки:

 

public class TextToBackgroundConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     // Validate the email text and retun background color of your choice 
    } 
    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     // Not needed 
    } 
} 

Include this resource as static resource in xaml file and use in the binding as below

<Label x:Name="lblEmail" Content="Email Adress" Foreground="{Binding ElementName=txtEmail,Path=Text,Converter={StaticResource bgconverter}}"}"/> <TextBox x:Name="txtEmail" Text="{Binding EmailAdress, UpdateSourceTrigger=PropertyChanged}"/>
1

IMO Вы не соответствуете правильному способу делать проверки в WPF. Для этого у нас есть IDataErrorInfo. См. this в качестве стартера.

Теперь, на ваш вопрос, ваш код говорит, что он никогда не обновит кисть ошибок до тех пор, пока вы не получите set, которого у вас нет. На самом деле вам не нужен сеттер в EmailAdressValid. Просто позвоните по телефону OnPropertyChanged, если адрес электронной почты указан в поле зрения.

public class MainData : INotifyPropertyChanged 
{ 
    private string _emailAdress; 
    public string EmailAdress 
    { 
     get { return _emailAdress; } 
     set 
     { 
      _emailAdress = value; 
      OnPropertyChanged(nameof(EmailAdress)); 
      OnPropertyChanged(nameof(EmailAdressValid)); 
     } 
    } 

    private System.Windows.Media.Brush _emailAdressValid; 
    public System.Windows.Media.Brush EmailAdressValid 
    { 
     get 
     { 
      if(_emailAdress.Contains("@")) 
      { 
       _emailAdressValid = Brushes.Black; 
      } 
      else 
      { 
       _emailAdressValid = Brushes.Red; 
      } 

      return _emailAdressValid; 
     } 
    } 
}