ここで説明する方法を使用して、ViewModel ICommand を Combobox の LostFocus イベントにアタッチしますCommandBehavior.RoutedEventName="LostFocus"
。バインディングの発生と同時にイベントが発生することを期待しUpdateSourceTrigger=LostFocus
ていましたが、そうではありませんでした。
selecteditem BindingUpdateSourceTrigger=LostFocus
は、キーボードのタブが離されるたびに、またはユーザーが実際にクリックしてドロップダウンから項目を選択した後に発生します (これが原因でフォーカスが失われる理由はわかりませんが、少なくとも選択が行われた後に発生します)。
添付された動作イベントは、ユーザーがコンボボックスをクリックするたびに発生します。すぐに。キーボードを使用している場合は通常どおり動作し、タブから離れると発火します。ただし、マウスを使用している場合、ユーザーが選択を行う前に、コントロールがフォーカスされるとイベントが発生します。選択した項目に対して lostfocus が行うようにこれを動作させる方法はありますか?
編集:別の答えが存在するかどうかは興味がありますが、追加のバインディングを設定することで、この問題を回避する方法を見つけました。SelectedItem はデフォルトで更新され、通常のプロパティ変更通知を処理し、selectedvalue は lostfocus で更新され、実行しようとしていたコマンドのみを処理します。バインディングは次のようになります。
SelectedItem="{Binding Path=SelectedCustomer, Mode=TwoWay}"
SelectedValuePath="CM_CUSTOMER_ID"
SelectedValue="{Binding Path=CustomerLostFocus, UpdateSourceTrigger=LostFocus}"