2016-07-09 7 views
1

hej,Benutzereingabebestätigung Bindung

ich bin nicht sicher, wie ich mein Problem lösen soll. Ich möchte die Benutzereingabe von meinem TextBox validieren und dann die Farbe meines Labels ändern, wenn die Eingabe falsch ist. Muss ich verwenden, um die Eingabe in meinem Get und Set zu validieren? Oder ist das total falsch?

mein XAML-Code:

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

Meine Daten Klasse:

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

Die Variable _emailAdress wird als int deklariert, und später wird als Zeichenfolge behandelt (_emailAdress.Contains ("@")). Was ist die Absicht? –

Antwort

0

Verwenden Kontrollbindung Funktion Direkt-Label an das E-Mail-Texteingabefeld zu binden. Verwenden Sie dann den Wertkonverter, um den Wert der E-Mail zu bestätigen und die erforderliche Hintergrundfarbe zurückzugeben. Beziehen Sie sich auf folgenden Code:

 

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 Sie folgen nicht einer korrekten Weise, Validierungen in WPF durchzuführen. Wir haben IDataErrorInfo dafür. Siehe this als Starter.

Jetzt kommt zu Ihrer Frage, Ihr Code sagt, es wird nie Fehler Pinsel aktualisieren, bis Sie set es, was Sie nicht tun. In der Tat benötigen Sie keinen Setter in EmailAdressValid Eigentum. Rufen Sie einfach OnPropertyChanged dafür, wenn die E-Mail-Adresse in Aussicht gestellt wird.

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; 
     } 
    } 
}