给定一个使用 WPF 双向绑定(bind)到 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”或任何其他替代方法?
最佳答案
我假设 UpdateSourceTrigger
是 LostFocus
,因此当控件 (filedX) 失去焦点时属性会更新。例如。用户单击将光标设置为另一个控件。
一种可能性是,将 UpdateSourceTrigger
设置为 PropertyChanged
。
另一种方法是强制当前获得焦点的元素更新源。
这是一个文本框的例子:
var focusedElement = Keyboard.FocusedElement;
if(focusedElement is TextBox)
{
var bindingExpression = ((TextBox)focusedElement).GetBindingExpression(TextBox.TextProperty);
if(bindingExpression != null)
{
bindingExpression.UpdateSource();
}
}
关于c# - IsDirty 对 EF 实体使用 INotifyPropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9825110/