WPF TabControl - Kan ikke programmatisk velge faner

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;
}
12
задан Sean U 25 May 2011 в 23:12
поделиться