Jeg har et brukergrensesnitt med en TabControl som opprinnelig viser en startside. Andre gjenstander kan legges til ved å dobbeltklikke på innhold i for eksempel en DataGrid. Nye faner bør velges når de opprettes. Hvis dokumentet som tilsvarer elementet i rutenettet allerede er åpent, bør den eksisterende fanen for det dokumentet åpnes i stedet for å opprette et nytt.
Jeg vet at jeg burde være i stand til å programmere en kategori ved å stille TabControl's SelectedItem eller SelectedIndex egenskaper. Den ønskede fanen aktiveres imidlertid aldri. Hvis jeg setter en og deretter inspiserer TabControl-tilstanden i feilsøkingsprogrammet, ser det ut til at begge felt oppdateres ordentlig. Etter at jeg fortsetter kjøringen, ser jeg imidlertid at den valgte kategorien forblir uendret i brukergrensesnittet, og hvis jeg stopper og inspiserer TabControls tilstand igjen, ser jeg at SelectedItem og SelectedIndex har returnert til sine tidligere verdier. Å velge en fane ved å klikke på den i brukergrensesnittet, derimot, fungerer helt fint.
Her er erklæringen for TabControl:
<TabControl x:Name="Tabs" >
<TabItem x:Name="StartPageTab" Header="Start Page" DataContext="{Binding Path=StartPageViewModel}">
...
</TabItem>
</TabControl>
Og koden for å legge til og velge faner:
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;
}