给定使用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(),因此记录不会保存

有什么办法强制使用“活页夹”或其他替代方法?

最佳答案

我想UpdateSourceTriggerLostFocus,所以当控件(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/

10-11 06:55