当用户在3个文本框中输入数字时,我会在第4个文本框中计算平均值。从前3个文本框的TextChanged事件中调用CalculateAverage方法。所有文本框都绑定。 (注意:我知道计算值不应存储在数据库中,但我无法更改。)我正在使用WPF 4和Entity Framework 4。
我的问题是普通文本框始终具有EntityState.Modified。这是因为加载数据或导航记录会导致TextChanged事件调用CalculateAverage。即使用户没有进行更改并且CurrentValue(平均值)与OriginalValue匹配,绑定机制现在也认为此记录是“脏”的。
我想知道是否有比我实施的更清洁的解决方案。我的修复是在数据加载期间和记录导航期间设置标志。这意味着我必须添加一个OnRecordChanging事件来设置_changingRecords标志和一个OnRecordChanged事件来取消设置它。在CalculateAverage的开头,我有if (_loadingData || _changingRecords) return;
来保释计算平均值,并阻止更新平均字段。
是否有更清洁的方法来避免这个问题?
答案 0 :(得分:0)
这样可行,我们实际上在项目上做了同样的事情,以避免控件之间的“事件风暴”。
您应该注意的一件事是错误情况,这样您就不会陷入“加载”状态,以便更新停止工作。