0

LLBLGen エンティティにバインドされた WinForms フォームがあります (この問題はこのバインディング ソースに固有のものではないと思いますが、念のため言及します)。私の目標は非常に単純に思えます。他のフィールドの計算に基づいて、フォームの別のフィールドを更新することです。

私の問題は、この計算を行うためにフォームの他の場所で使用されているのと同じビジネス ロジックを再利用したいため、バインドされたエンティティをビジネス ロジック レイヤーに渡して処理できるようにすることです。

私が奇妙だと思うのは、フォーカス チェーン ( http://msdn.microsoft.com/en-us/library/system.windows.forms.control.enter.aspxを参照) のどこにいるのかが見つからないことです。バインドされたエンティティを更新されたフォームで使用できます。計算は正常に実行されますが、更新前の値が使用されます。

過去に、.text から値を取得し、それらが使用可能であることを検証して、そこから移動することで、この問題を回避しました。また、「更新」ボタンを使用して回避しました。値を編集してすぐにクリックした場合でも、クリックイベントは更新された値にアクセスできます。

それでも、明らかな何かが欠けているようです。イベントチェーンのどこかで、バインドされた値が更新され、そこで計算を実行できるはずです。

私の中心的な質問: WinForms で更新されたバインドされた要素にアクセスするには、どのイベントを使用する必要がありますか?

4

1 に答える 1

1

私の懸念は、バインドされたデータの変更を取得することであったことを考慮して、UI イベントの計算を停止し、問題のエンティティの PropertyChanged() イベントをリッスンすることに切り替えました。これは問題を回避し、うまく機能しています...そしておそらく私が最初にやるべきだったことです.)

今のところ、これは未回答のままにしておきます。おそらく誰かが、フォーカス イベント チェーンに関する基本的な質問に対する答えをまだ持っています。このソリューションを他のバインディング ソースでテストしたことはありませんが、INotifyPropertyChanged はデータ バインディングの基盤であるため、この手法は他のデータ ソースでも機能すると思われます。

于 2011-03-31T20:58:26.897 に答える