У меня есть пользовательский интерфейс с TabControl, который первоначально отображает стартовую страницу.Другие элементы можно добавить к нему, дважды щелкнув по содержимому, например, в DataGrid.Новые вкладки должны быть выбраны при их создании.Если документ, соответствующий элементу в сетке, уже открыт, то вместо создания новой вкладки следует открыть существующую вкладку для этого документа.
Я знаю, что должен иметь возможность программно выбирать вкладку с помощьюустановка свойств SelectedItem или SelectedIndex для TabControl.Однако нужная вкладка фактически никогда не активируется.Если я установлю один и затем проверю состояние TabControl в отладчике, то оба поля, кажется, обновляются правильно.Однако после продолжения выполнения я вижу, что выбранная вкладка остается неизменной в пользовательском интерфейсе, и если я снова приостанавливаю и проверяю состояние TabControl, я вижу, что SelectedItem и SelectedIndex вернулись к своим предыдущим значениям.С другой стороны, выбор вкладки путем нажатия на нее в пользовательском интерфейсе работает просто отлично.
Вот объявление для TabControl:
<TabControl x:Name="Tabs" >
<TabItem x:Name="StartPageTab" Header="Start Page" DataContext="{Binding Path=StartPageViewModel}">
...
</TabItem>
</TabControl>
И код для добавления и выбора вкладок:
private void _SelectTab(MyViewModel model)
{
TabItem tab;
if (_TryFindTab(model, out tab)) Tabs.SelectedItem = tab;
}
private bool _TryFindTab(MyViewModel target, out TabItem tab)
{
foreach (TabItem item in Tabs.Items)
{
MyViewModel model = item.DataContext as MyViewModel;
if (model != null && model.Equals(target))
{
tab = item;
return true;
}
}
tab = null;
return false;
}
private void _AddTab(MyViewModel model)
{
TabItem tab = new TabItem { DataContext = model, Content = new MyView() };
Binding bind = new Binding { Source = model, Path = new PropertyPath("Name") };
tab.SetBinding(TabItem.HeaderProperty, bind);
Tabs.Items.Add(tab);
Tabs.SelectedItem = tab;
}