gpt4 book ai didi

c# - IsDirty 对 EF 实体使用 INotifyPropertyChanged

转载 作者:行者123 更新时间:2023-11-30 17:13:22 24 4
gpt4 key购买 nike

给定一个使用 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”或任何其他替代方法?

最佳答案

我假设 UpdateSourceTriggerLostFocus,因此当控件 (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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com