各タブとそのコンテンツがObservableCollectionにデータバインドされているTabControlがあります。
<TabControl ItemsSource="{Binding Path=.}">
<TabControl.ContentTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=propertyValue}" />
</DataTemplate>
</TabControl>
</TabControl>
タブ1をクリックしてから、テキストボックスに何かを入力してタブを押すと、テキストボックスのフォーカスが失われ、テキストボックスに入力した新しいデータがObservableCollectionアイテムにコミットされます。
ただし、TestBoxにデータを入力し、すぐに別のタブをクリックすると、データがコミットされません。さらに、データに戻ると、入力したデータに設定されていません。
現在のタブが変更される前にデータを強制的にコミットする方法を知っている人はいますか?
更新と修正
私がしたことは、SelectionChanged
イベントを配線することでした:
private void tabData_SelectionChanged(object sender, SelectionChangedEventArgs e) {
theTabControl.Focus();
}
TabControlでFocus()を呼び出すと、TextBoxはフォーカスを失い、データをコミットします。これを行ったのは、同様の動作を示す他のコントロール(DatePickerなど)があるためです。これは一種のキャッチオールです。