ユーザーが3つのテキストボックスに数値を入力すると、4番目のテキストボックスで平均が計算されます。CalculateAverageメソッドは、最初の3つのテキストボックスのTextChangedイベントから呼び出されます。すべてのテキストボックスがバインドされます。(注:計算値をデータベースに保存するべきではないことはわかっていますが、これを変更することはできません。)WPF4とEntityFramework4を使用しています。
私の問題は、平均的なテキストボックスに常にEntityState.Modifiedがあることです。これは、データのロードまたはレコードのナビゲートにより、TextChangedイベントがCalculateAverageを呼び出すためです。ユーザーが変更を加えておらず、CurrentValue(平均)がOriginalValueと一致している場合でも、バインディングメカニズムはこのレコードを「ダーティ」と見なします。
私が実装したものよりもクリーンなソリューションがあるかどうか疑問に思います。私の修正は、データのロード中およびレコードのナビゲーション中にフラグを設定することです。これは、_changingRecordsフラグを設定するためにOnRecordChangingイベントを追加し、設定を解除するためにOnRecordChangedイベントを追加する必要があることを意味します。CalculateAverageの開始時に、if (_loadingData || _changingRecords) return;
CalculateAverageを回避し、平均フィールドが更新されないようにする必要があります。
この問題を回避するためのよりクリーンなアプローチはありますか?