gpt4 book ai didi

c# - 在验证文本框/复选框之前,文本框/复选框的数据绑定(bind)值不正确

转载 作者:太空狗 更新时间:2023-10-29 21:30:46 25 4
gpt4 key购买 nike

我有一个绑定(bind)到 Entity Framework 实体属性的 winforms 复选框。

例如,我有一个 bindingSource.DataSource = myDog,其中一个复选框绑定(bind)到属性 IsSleeping,这样当用户选中该框时,IsSleeping 变为 true,当用户取消选中该框时,IsSleeping 变为 false。

这很好用。问题是 IsSleeping 的值在复选框被验证之前不会更新,只有当焦点从复选框远离到其他东西时才会发生。因此,如果我希望在未选中该框时发生某些事情:

private void IsSleepingCheckbox_CheckedChanged(object sender, EventArgs e)
{
OnDogPropertyChanged(myDog);
MyAnimalEntities.SaveChanges();
}

myDog.IsSleeping 将仍然为 true,直到随后出现复选框的 Validated。因此,当可怜的 myNaughtyKitty (他正在监听 DogPropertyChanged 事件) 来吃 myDog 的食物时菜盘认为 myDog 正在 sleep ,myDog 真的刚刚醒来! 哦不!

更糟MyAnimalEntities.SaveChanges() 还没有看到对 myDog 的更改,所以 IsSleeping< 的值 永远不会保存到数据库中。将 .SaveChanges() 调用移动到 IsSleepingCheckbox_Validated 并不能解决这个问题,因为如果复选框被切换但随后表单关闭而没有移动焦点 away 来自复选框,复选框永远不会被验证,因此它的状态永远不会被保存!

我想这一定是数据绑定(bind)和复选框/文本框的一个相当普遍的问题,事实上我在网上发现了大量关于这个主题的帖子,但似乎没有人有解决方案。 有没有人能够为此找到解决方法?

最佳答案

您可以更改 Binding.DataSourceUpdateMode属性设置为 OnPropertyChanged(默认为 OnValidation),这将在用户单击复选框时更新数据源。不幸的是,CheckedChanged 事件仍然在数据源更新之前触发。

要处理这个问题,您可以处理 BindingSource.ListChanged事件并将您的 SaveChanges 代码移到那里。

bindingSource = new BindingSource();
bindingSource.DataSource = myDog;
checkBox1.DataBindings.Add(new Binding("Checked", bindingSource, "IsSleeping"));
checkBox1.DataBindings[0].DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;

bindingSource.ListChanged += new ListChangedEventHandler(bindingSource_ListChanged);

HTH

关于c# - 在验证文本框/复选框之前,文本框/复选框的数据绑定(bind)值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210047/

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