ユーザーがフォーカス不可能なものをクリックすると、コントロールを失うことができますか?
質問
多数のアイテムで満たされたアイテムコントロールがあります。各アイテムは、バインドされたテキストボックスといくつかのボタンです。ユーザーにテキストボックスからテキストボックスまでタブにできるようにしたいので、ボタンにはフォーカスセットがfalseになります。これはうまく機能します。唯一の問題は、テキストボックスがフォーカスを失っていないため、バインディングがソースを更新していないため、ボタンの背後にあるコードが正しい値で動作していないことです。
これを修正する方法を考えることができます。たとえば、ボタンのクリックハンドラーが論理ツリーを通過して関連するテキストボックスに移動し、製造はソースを明示的にバインディングします。しかし、私にはそれよりも良い方法がなければならないように思えます。これは、フォーカスモデルをよりよく理解していれば、おそらく私には明らかです。ある?
解決
パフォーマンスが問題であるため、 ジョシュ・スミスによって書かれた記事 使える。コンテキストはあなたの問題に非常に似ています。ジョシュは、バインディングアップデートを手動でトリガーすることでそれを解決します。
TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
if (focusedTextBox == null)
return;
BindingExpression textBindingExpr =
focusedTextBox.GetBindingExpression(TextBox.TextProperty);
if (textBindingExpr == null)
return;
textBindingExpr.UpdateSource();
他のヒント
パフォーマンスを可能にする場合は、変更できます UpdateSourceTrigger
これらのテキストボックス要素の PropertyChanged
それ以外の LostFocus
.
所属していません StackOverflow