gpt4 book ai didi

.net - 强制数据绑定(bind)的 Windows 窗体复选框在单击时立即更改属性值

转载 作者:行者123 更新时间:2023-12-04 15:04:09 24 4
gpt4 key购买 nike

我有一个实现 INotifyPropertyChanged 的​​对象,以及一个绑定(bind)到该对象的 bool 属性的复选框。这可行,但我发现当我选中或取消选中复选框时,对象的绑定(bind)属性不会更新,直到我单击另一个控件、关闭表单或以其他方式使复选框失去焦点。

我希望复选框立即生效。也就是说,当我选中该框时,该属性应立即设置为true,而当我取消选中该框时,应立即将其设置为false。

我通过为复选框的 CheckedChanged 事件添加一个处理程序来解决这个问题,但是有没有我忽略的“正确方法”来做到这一点?

一个类似的 Stack Overflow 问题是 Databound value of textbox/checkbox is incorrect until textbox/checkbox is validated .

最佳答案

将绑定(bind)模式设置为 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);
}

只要我单击该框,这就会起作用。

关于.net - 强制数据绑定(bind)的 Windows 窗体复选框在单击时立即更改属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com