Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF绑定不';行不通_Wpf_Binding - Fatal编程技术网

WPF绑定不';行不通

WPF绑定不';行不通,wpf,binding,Wpf,Binding,我举了一个简单的例子: XAML: 代码隐藏: public partial class MainWindow : Window { private ObservableCollection<MyObject> collection = new ObservableCollection<MyObject>(); public MainWindow() { InitializeComponent(); coll

我举了一个简单的例子:

XAML:


代码隐藏:

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;
    }
}
公共部分类主窗口:窗口
{
私有ObservableCollection集合=新ObservableCollection();
公共主窗口()
{
初始化组件();
collection.Add(新的MyObject(true));
//grid.DataContext=集合[0];
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
集合[0]。IsSelected=false;
}
}
公共类MyObject
{
公共布尔值被选为{get;set;}
公共对象(bool ISSELECT)
{
this.IsSelected=IsSelected;
}
}
在集合[0]中单击按钮不会更改cb.IsChecked。IsSelected已更改。

即使我取消对grid.DataContext=collection[0]的注释;-没有什么变化


在实际示例中,我在列表框的项目模板中有相同的复选框。因此,行为是相同的-复选框的选择不会更改。

您需要在MyObject类型上实现INotifyPropertyChanged

您需要在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;
    }
}

请尝试以下代码:

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