2016-05-12 11 views
1

Ich habe ein Textfeld in WPF, dessen "Text" -Eigenschaft mit Mode = TwoWay an eine Zeichenfolge "EmployeeSource.ID" gebunden ist. Mein Problem ist, dass wenn ich das EmployeeSource-Objekt ändere, die Bindung nicht funktioniert. Was ist falsch an meinem Ansatz?Ansicht aktualisieren, wenn Objektänderungen geändert werden

XAML

<TextBox x:Name="NameTextBox" Margin="5,5,10,5" TextWrapping="Wrap" 
Text="{Binding SelectedEmployee.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
Grid.Row="1" Grid.Column="1" /> 

Code hinter

private Employee _selectedEmployee; 

public Employee SelectedEmployee 
{ 
    get { return _selectedEmployee; } 
    set 
    { 
     _selectedEmployee = value; 
     UpdateTextBoxes(); 
    } 
} 

private void UpdateTextBoxes() 
{ 
    NameTextBox.Text = SelectedEmployee?.Name; 
} 
+0

Ihr Objekt/Objekt nicht implementiert die INotifyPropertyChanged-Schnittstelle. Es muss implementiert werden, um mit Bindung zu arbeiten. Siehe: http://stackoverflow.com/questions/8186864/xaml-binding-from-a-string-to-textbox-not-working – pKami

Antwort

0

Bitte versuchen Sie den Code unten. Sie müssen die INotifyPropertyChanged-Schnittstelle implementieren, um eine Datenbindung in WPF zu erreichen. Dies ist das Grundkonzept der WPF-Datenbindung und des MVVM-Musters. Dies sollte für Sie arbeiten.

-Code hinter:

public class YourClassName : INotifyPropertyChanged 
{ 
    // These fields hold the values for the public properties. 
    private Employee _selectedEmployee; 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 

    // The constructor is private to enforce the factory pattern. 
    private YourClassName() 
    { 
     _selectedEmployee = new Employee(); 
    } 

    public Employee selectedEmployee 
    { 
     get 
     { 
      return this._selectedEmployee; 
     } 
     set 
     { 
      if (value != this._selectedEmployee) 
      { 
       this._selectedEmployee = value; 
       NotifyPropertyChanged("selectedEmployee"); 
      } 
     } 
    } 
} 

XAML:

<TextBox x:Name="NameTextBox" Margin="5,5,10,5" TextWrapping="Wrap" 
Text="{Binding selectedEmployee.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
Grid.Row="1" Grid.Column="1" /> 
Verwandte Themen