WPF绑定不起作用

时间:2012-04-28 06:11:26

标签: wpf binding

我有简化的例子:

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]; - 没有改变。

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

2 个答案:

答案 0 :(得分:3)

您需要在MyObject类型

上实现INotifyPropertyChanged

答案 1 :(得分: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;
    }
}