3

アプリと、いくつかのTabItemsを含むTabControlを備えた設定ウィンドウがあります。それらのそれぞれには、同じ Singleton オブジェクトにデータバインドされたいくつかのフィールド (テキストボックス) があります。
[保存] ボタンをクリックした後にのみ、データバインディングへのエレガントで WPF のような方法はありますか?
現在、テキストボックスの内容を変更した直後にデータバインドされており、シングルトンに古い値を持たせ、保存ボタンをクリックした後にのみ更新する必要があります。

4

3 に答える 3

3

DataBindingの XAML で使用されるオブジェクトの場合、次のように値を持つプロパティをTextbox使用します。UpdateSourceTriggerExplicit

<TextBox Name="itemNameTextBox"
     Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />

UpdateSourceTrigger 値を Explicit に設定すると、ソース値は、アプリケーションが以下のようにUpdateSourceメソッドを呼び出したときにのみ変更されます (以下のコードを SaveClickイベントに配置できます)。

BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
于 2013-07-24T07:44:35.390 に答える
2

各プロパティのセットで変更の通知を発生させる代わりに (それが再バインディングと更新をトリガーするため)、すべての発生通知を保存ボタンに入れます。次に、[保存] をクリックして保存し、それらの (現在設定されている) プロパティに再バインドするようにビューに指示します。

これをさらに進めるには:非シングルトンプロパティにバインドします(保存がクリックされるまで古い設定を保持したいため)-それらのプロパティの通知を発生させません。

保存ボタンで、シングルトン プロパティを設定してから、他のプロパティのすべての通知を発生させます。

キャンセル ボタンで、他のプロパティをシングルトン プロパティの値に設定し、すべての通知を発生させます。

ビューが初めてロードされたときにプロパティをシングルトン プロパティに設定し、すべての通知を (キャンセルのように) 発生させることを忘れないでください。

于 2013-07-24T07:40:26.090 に答える
0

WPF を使用している場合は、UpdateSourceTrigger を LostFocus に変更します。目的は解決すると思います。

Text="{Binding Path=MyText, UpdateSourceTrigger=LostFocus, Mode=TwoWay}"
于 2013-07-24T07:44:06.273 に答える