WPF绑定不起作用

问题描述:

我简单例子:WPF绑定不起作用

XAML:

<CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" Name="cb" /> 
<Button Name="button1" Click="button1_Click" /> 

后面的代码:

public partial class MainWindow : Window 
{ 
    private ObservableCollection<MyObject> collection = new ObservableCollection<MyObject>(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     collection.Add(new MyObject(true)); 
     //grid.DataContext = collection[0]; 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     collection[0].IsSelected = false; 
    } 
} 

public class MyObject 
{ 
    public bool IsSelected { get; set; } 

    public MyObject(bool isSelected) 
    { 
     this.IsSelected = isSelected; 
    } 
} 

的cb.IsChecked不通过点击按钮虽然改变集合[0] .IsSelected已更改。

即使我取消注释grid.DataContext =集合[0]; - 没有改变。

在实际的例子中,我在列表框的项目模板中有相同的复选框。所以行为是一样的 - 复选框的选择不会改变。

您需要实现您的MyObject类型INotifyPropertyChanged的

请尝试以下代码:

public class MyObject : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

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

    private bool _isSelected; 

    public bool IsSelected 
    { 
     get { return _isSelected; } 
     set 
     { 
      _isSelected = value; 
      NotifyPropertyChanged("IsSelected"); 
     } 
    } 

    public MyObject(bool isSelected) 
    { 
     this.IsSelected = isSelected; 
    } 
}