2012-04-28 3 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]; - Ничего не изменилось.

В реальном примере у меня такой же флажок в шаблоне элемента списка. Таким образом, поведение одного и того же - выбор флажков не изменяется.

ответ

3

Вы должны реализовать INotifyPropertyChanged от типа MyObject

2

Пожалуйста, попробуйте следующие коды:

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; 
    } 
} 
Смежные вопросы