0

ユーザーが3つのテキストボックスに数値を入力すると、4番目のテキストボックスで平均が計算されます。CalculateAverageメソッドは、最初の3つのテキストボックスのTextChangedイベントから呼び出されます。すべてのテキストボックスがバインドされます。(注:計算値をデータベースに保存するべきではないことはわかっていますが、これを変更することはできません。)WPF4とEntityFramework4を使用しています。

私の問題は、平均的なテキストボックスに常にEntityState.Modifiedがあることです。これは、データのロードまたはレコードのナビゲートにより、TextChangedイベントがCalculateAverageを呼び出すためです。ユーザーが変更を加えておらず、CurrentValue(平均)がOriginalValueと一致している場合でも、バインディングメカニズムはこのレコードを「ダーティ」と見なします。

私が実装したものよりもクリーンなソリューションがあるかどうか疑問に思います。私の修正は、データのロード中およびレコードのナビゲーション中にフラグを設定することです。これは、_changingRecordsフラグを設定するためにOnRecordChangingイベントを追加し、設定を解除するためにOnRecordChangedイベントを追加する必要があることを意味します。CalculateAverageの開始時に、if (_loadingData || _changingRecords) return;CalculateAverageを回避し、平均フィールドが更新されないようにする必要があります。

この問題を回避するためのよりクリーンなアプローチはありますか?

4

1 に答える 1

0

これは機能します。コントロール間の「イベントストーム」を回避するために、実際にはプロジェクトで同じことを行いました。

注意が必要なことの1つは、エラー状態です。これにより、「読み込み中」の状態でスタックして更新が機能しなくなることはありません。

于 2011-03-24T19:40:49.530 に答える