Я не знаю точную причину, почему это происходит, и это меня сильно раздражает.
Но вот мой обходной путь:
В приведенном ниже примере флажок «блокирует» текущую вкладку. Поэтому флажок означает, что пользователь не может изменить вкладку.
void Items_CurrentChanging(object sender, CurrentChangingEventArgs e)
{
if (checkBox1.IsChecked.Value)
{
var item = ((ICollectionView)sender).CurrentItem;
e.Cancel = true;
tabControl1.SelectedItem = item;
}
}
По сути, происходит то, что (если я правильно понимаю) визуальное дерево обновляется, а логическое - нет. Вышеуказанный способ заставляет визуальный объект синхронизироваться с логическим деревом.