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