1

単純な問題です。たとえば、この TextBox があるとします (実際のところ、これはあります)。

<TextBox.Text>
    <Binding  Path="MySourceProperty"
              Mode="OneWayToSource"
              UpdateSourceTrigger="PropertyChanged" />
</TextBox.Text>

Text プロパティが変更されるたびに、MySourceProperty が正常に更新されます。それに加えて、TextBox がフォーカスされたときにも MySourceProperty が更新されるようにする必要があります。

1 つのコントロールに対して 2 つの UpdateSourceTriggers を持つ方法はありますか?


詳細については、MySourceProperty にバインドされたラベルを含む親ビューと、TextBox と ComboBox を含む別のビューがあります。

したがって、次のいずれかのイベントが発生したときに MySourceProperty を更新する必要があります。

  • TextBox.Text の変更
  • ComboBox.SelectedItem の変更
  • TextBox にフォーカスする
  • ComboBox にフォーカスする

最後の 2 つのイベントは明らかにここにあります。コントロールにフォーカスを与えても、その Text または SelectedItem プロパティは変更されず、MySourceProperty も更新されないためです。


編集:私が欲しいものを明確にするために、質問を太字にしました。コード ビハインドでイベント ハンドラーを使用することで問題を解決できましたが、WinForms の習慣をなくそうとしているところです。しかし、それが唯一の解決策である場合は、遠慮なく答えてください。

4

3 に答える 3

2

これがあなたに役立つかどうかわからない

エルノが言ったように、最初に試してみますが、それがあなたのシナリオに合わない場合は、これと同様のことをしました.

  1. UpdateSourceTrigger を明示的に設定します。

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

  1. 次に、コード ビハインドのそれぞれのイベントで UpdateSource を呼び出します (上記で説明しました)。

    // itemNameTextBox is an instance of a TextBox
    BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
    be.UpdateSource();
    

ここから引用

于 2014-10-13T14:48:06.420 に答える
0

エンティティを表すこれらのコントロールを単一のデータ テンプレートまたはユーザー コントロールに配置することができます。次に、そのコントロールのデータ コンテキストをコンボ ボックスの選択された項目にバインドします。バインディングは、選択したアイテムに関連し、自動的に更新されます。フォーカスや複数の更新トリガーを処理する必要はありません。

于 2014-10-13T14:45:26.573 に答える
0

1 つのコントロールに対して 2 つの UpdateSourceTriggers を持つ方法はありますか?`

あなたの質問に対する答えはノーです。そして、投与しても、もう一方のトリガーはLostFocus.

あなたが本当にあなたが言った通りなら:

コード ビハインドでイベント ハンドラーを使用することで問題を解決できましたが、WinForms の習慣をなくそうとしているところです。

次に、私の理解に基づいて、2 つのコントロールを使用しTextBoxComboBox単一のプロパティを更新していますMySourceProperty。私の提案は、TwoWayバインディングを使用するか、ComboBoxwith ComboBox.IsEditableset to true を使用して実際に結合し、 data bindComboBox.TextおよびComboBox.SelectedItemwith your MySourceProperty.

編集:あなたがやっているようにそれを行う必要がある場合は、1つのプロパティだけを使用するのではなく、2つの異なるプロパティにバインドすることをお勧めしTextBox.TextますComboBox.SelectedItem。次にMySourceProperty、フォーカス ステータスに基づいていずれかを返す必要があります。

于 2014-10-13T15:00:30.340 に答える