给定使用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并单击save(在这种情况下,这是一个有效的模型!),否则一切工作都很好。
问题是直到Close()执行后才调用PropertyChanged(),因此记录不会保存
有什么办法强制使用“活页夹”或其他替代方法?
最佳答案
我想UpdateSourceTrigger
是LostFocus
,所以当控件(filedX)失去焦点时,属性将更新。例如。用户单击可将光标设置到另一个控件中。
一种可能是将UpdateSourceTrigger
设置为PropertyChanged
。
另一种方法是强制当前关注的元素更新源。
这是一个TextBox的示例:
var focusedElement = Keyboard.FocusedElement;
if(focusedElement is TextBox)
{
var bindingExpression = ((TextBox)focusedElement).GetBindingExpression(TextBox.TextProperty);
if(bindingExpression != null)
{
bindingExpression.UpdateSource();
}
}
关于c# - 将INotifyPropertyChanged用于EF实体的IsDirty,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9825110/