簡略化: 私の見解では、ボタンとある種の TextBox を含む xaml ページがあります。ボタンは ViewModel の DelegateCommand にバインドされ、編集ボックスは ViewModel のプロパティにバインドされます。
View:
<Button Command="{Binding MyCommand}"/>
<TextBox Text="{Binding MyString}"/>
ViewModel:
public DelegateCommand MyCommand { get; set; }
public String MyString { get; set; }
ユーザーがボックスに何かを入力してボタンをクリックすると、ボタンはフォーカス変更イベントを受け取りません。したがって、そのコンテンツはプロパティに更新されません。そのため、プロパティ MyString は、ボタンをクリックしたときに TextBox の内容を反映しません。そのため、MyCommand がどのような処理を行っていても、現在の入力ではなく古いデータを処理しています。
これが本当にただの TextBox である場合は、バインディングに UpdateSourceTrigger=PropertyChanged を追加します。ただし、この場合、編集コントロールはもう少し複雑で、コンテンツに対して何らかの検証を行う必要があります。そのため、マウスでボタンを押すときに、ある種の「フォーカスが失われた」信号が必要です。
私の問題は: MVVM では、ボタンの背後にあるコードはビューにアクセスできないため、フォーカスを失うことはできません。
マウスでクリックしたときにボタンにキーボードフォーカスを取得させる方法は xaml (ビューなど) にありますか? これは、カスタム コントロールが「フォーカスを失った」というメッセージを取得する最も簡単な方法です。