Choć kwestia ta jest dość stary i dobrze już odpowiedziałem, myślałem, że dodam tę dodatkową odpowiedź aby pokazać alternatywny sposób zmiany wybranego TabItem
w TabControl
. Jeśli masz model widoku dla każdego modelu TabItem
, może być pomocne posiadanie w nim właściwości IsSelected
, aby określić, czy jest wybrana, czy nie. Jest możliwe, aby dane wiążą ten IsSelected
nieruchomość na własność TabItem.IsSelected
pomocą właściwości ItemContainerStyle
:
<TabControl ItemsSource="{Binding MenuItems}" TabStripPlacement="Top">
<TabControl.ItemTemplate>
<DataTemplate DataType="{x:Type ControlViewModels:MenuItemViewModel}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImageSource}" Margin="0,0,10,0" />
<TextBlock Text="{Binding HeaderText}" FontSize="16" />
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate DataType="{x:Type ControlViewModels:MenuItemViewModel}">
<ContentControl Content="{Binding ViewModel}" />
</DataTemplate>
</TabControl.ContentTemplate>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
Teraz można zmienić wybrany TabItem
z dominującą modelu widoku jak ten:
MenuItems[0].IsSelected = true;
Zauważ, że Ta właściwość to dane powiązane z właściwością TabItem.IsSelected
, nazywając to ...:
MenuItems[1].IsSelected = true;
... spowoduje także automatyczne ustawienie właściwości MenuItems[0].IsSelected
na false
. więc jeśli model widoku, z którym pracujesz, ma ustawioną właściwość IsSelected
na wartość true, możesz mieć pewność, że powiązany widok zostanie wybrany w polu TabControl
.
Proszę nie wywoływać "okna" WPF "formularza". To zniewaga. –
lol @HighCore - dosłownie powiedziałem to samo koledze kilka dni temu ... – JerKimball
Proszę spojrzeć na [to] (http://stackoverflow.com/questions/15209870/dynamically-updating-tabcontrol-content- at-runtime/15210593 # 15210593) wyjaśnienie, czym jest 'TabControl' i jak powinno być traktowane, z punktu widzenia MVVM. –