2

現在、Metroのプログラミング中にこの問題が発生していますが、WPF、Silverlight、場合によってはWinFormsにも当てはまると確信しています。

データバインドされたTextBoxと、TextBoxのLostFocusイベントにアタッチされたメソッドがあります。フォーカスが失われた場合、データを永続化するために、コードビハインドで保存関数をトリガーする必要があります。問題は、ビジネスオブジェクトがTwoWayデータバインディングを介してGUIから更新される前にLostFocusイベントがトリガーされることです。

これを処理するための最良の方法は何ですか?LostFocusメソッドからデータバインディングを強制的に更新する方法はありますか(おそらくプラットフォーム固有です)?

4

2 に答える 2

1

GUIでテキストボックスを更新する代わりに、ビジネスロジックを実行したいようです。Textboxをonly に設定してBindingMode.OneWay、ビジネス オブジェクトが変更されたときにテキスト ボックスが適切に更新されるようにします。

次に、Lostfocus イベントで (これも wpf ですが、理解できると思います):

private void EditBoxLostFocus( object sender, KeyboardFocusChangedEventArgs e )
{
   var textbox = sender as TextBox;

   //update your business object w/ textbox.Text value
   //other business logic
}

このようにして、オブジェクトがいつ更新されるかを完全に制御し、ビジネス ルールを適用できます。

于 2012-08-09T16:05:28.540 に答える
0

TextBox バインディングで UpdateSourceTrigger = PropertyChanged を設定します。 http://msdn.microsoft.com/en-us/library/system.windows.data.updatesourcetrigger(v=vs.100).aspx

于 2012-08-10T08:22:48.683 に答える