2016-05-12 65 views
1

我在WPF中有一个TextBox属性绑定到Modend = TwoWay的字符串“EmployeeSource.ID”。我的问题是,当我更改EmployeeSource对象,绑定不起作用。我的方法有什么问题?当绑定对象更改时刷新视图

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" /> 

代码隐藏

private Employee _selectedEmployee; 

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

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

你的对象/属性没有实现INotifyPropertyChanged接口。它需要被执行来与绑定一起工作。请参阅:http://stackoverflow.com/questions/8186864/xaml-binding-from-a-string-to-textbox-not-working – pKami

回答

0

请尝试以下的代码。您需要实现INotifyPropertyChanged接口以实现WPF中的数据绑定。这是WPF数据绑定和MVVM模式的基本概念。这应该适合你。背后

代码:

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" /> 
相关问题