WPF

2012-04-28 6 views
1

私が簡略化されている例を動作しませんバインディング: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 = collection [0]; - 何も変わっていません。

実際の例では、リストボックスのアイテムテンプレートに同じチェックボックスがあります。つまり、動作は同じです。チェックボックスの選択は変更されません。あなたのMyObjectにタイプ

答えて

3

は、以下のコードを試してみてください:

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

にINotifyPropertyChangedのを実装する必要が