我有一个实现INotifyPropertyChanged的对象,以及一个绑定到该对象的布尔属性的复选框。这有效,但我发现当我选中或取消选中该复选框时,对象的bound属性不会更新,直到我单击另一个控件,关闭表单或以其他方式使复选框失去焦点。
我希望该复选框立即生效。也就是说,当我选中该框时,该属性应立即设置为true,当我取消选中该框时,应立即将其设置为false。
我通过为复选框的CheckedChanged事件添加处理程序来解决这个问题,但有没有“正确的方法”来执行此操作我忽略了?
类似的Stack Overflow问题是 Databound value of textbox/checkbox is incorrect until textbox/checkbox is validated 。
答案 0 :(得分:6)
将绑定模式设置为OnPropertyChanged:
this.objectTestBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.objectTestBindingSource.DataSource = typeof(WindowsFormsApplication1.ObjectTest);
this.checkBox1.DataBindings.Add(
new System.Windows.Forms.Binding(
"Checked",
this.objectTestBindingSource,
"SomeValue",
true,
System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
public class ObjectTest: System.ComponentModel.INotifyPropertyChanged
{
public bool SomeValue
{
get { return _SomeValue; }
set { _SomeValue = value; OnPropertyChanged("SomeValue"); }
}
private bool _SomeValue;
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
if (string.IsNullOrEmpty(name)) {
throw new ArgumentNullException("name");
}
if (PropertyChanged != null) {
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(name));
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
ObjectTest t = new ObjectTest();
this.objectTestBindingSource.Add(t);
}
只要我点击该框,就会有效。