【发布时间】:2011-05-11 17:40:48
【问题描述】:
我有一个绑定到实体框架实体属性的 winforms 复选框。
例如,我有一个bindingSource.DataSource = myDog 带有一个绑定到属性IsSleeping 的复选框,因此当用户选中该框时,IsSleeping 变为 true,而当用户取消选中该框时,IsSleeping 变为假的。
这很好用。问题是IsSleeping 的值在复选框被验证之前不会更新,这仅在焦点从复选框移动离开 时才会发生。因此,如果我想在未选中该框时发生某些事情:
private void IsSleepingCheckbox_CheckedChanged(object sender, EventArgs e)
{
OnDogPropertyChanged(myDog);
MyAnimalEntities.SaveChanges();
}
myDog.IsSleeping 仍然为真,直到复选框的 Validated 稍后出现。因此,当可怜的myNaughtyKitty (谁在听DogPropertyChanged 事件) 来吃myDog 的菜时以为myDog 正在睡觉,myDog 真的只是起来! 哦不!
更糟糕的是,MyAnimalEntities.SaveChanges() 还没有看到对myDog 的更改,因此IsSleeping 的值永远不会保存到数据库中。将.SaveChanges() 调用移动到IsSleepingCheckbox_Validated 并不能解决这个问题,因为如果复选框被切换但随后表单关闭而没有将焦点从复选框移开,复选框是从未验证,因此它的状态永远不会被保存!
我想这一定是数据绑定和复选框/文本框的一个相当普遍的问题,而且我确实在网上找到了大量关于该主题的帖子,但似乎没有人有解决方案。 有人能找到解决方法吗?
【问题讨论】:
标签: c# .net winforms entity-framework data-binding