【发布时间】:2012-04-07 04:21:09
【问题描述】:
给定一个使用 WPF 两种方式绑定到 EF 实体对象的标准记录编辑表单
IsDirty 如下处理
entity.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(ct_PropertyChanged);
DataContext = entity;
void entity_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
IsDirty = true;
}
void SaveAndClose()
{
if ( IsDirty ) { // doSave }
Close();
}
一切都很好,除非用户只更改 fieldX 并点击保存(在这种情况下这是一个有效的模型!)
问题是在 Close() 执行之前不会调用 PropertyChanged(),因此不会保存记录
有什么方法可以强制使用“Binder”或任何其他替代方法?
【问题讨论】:
-
上面的两个答案都没有抓住重点。当您按下“保存并关闭”按钮时,任何其他控件都将失去焦点,将发生绑定并触发 PropertyChange。我根据您的描述创建了一个简单的测试应用程序,一切正常。不幸的是,这意味着我无法为您提供解决方案。你能发布更多代码/xml吗?
-
当然要说明的另一点是实体框架 ObjectContext 正在为您跟踪所有更改,因此您只需调用 myEntities.SaveChanges(),因为它已经知道一个对象是脏的。
-
@Phil button_click 在 entity_PropertyChanged 之前被调用,这就是问题所在
-
您使用的是什么版本的 .net 等?
-
@Phil .net 4,与 2010 相比,虽然这个 shd 没有影响,但我隐约记得很久以前在 winforms 中类似的东西
标签: c# .net wpf entity-framework data-binding