J'ai une fenêtre principale avec un TabControl
dedans. Chaque onglet contient un UserControl
associé. Dans l'un de mes UserControl
, j'ai un bouton. Lorsque je clique sur le bouton, je voudrais changer le SelectedIndex
du TabControl
qui est dans ma fenêtre principale. J'utilise le modèle MVVM donc si possible, je voudrais le faire en XAML avec la propriété Command sur mon bouton.Modifier SelectedIndex de TabControl dans MainWindow de Child UserControl
Par exemple:
<Button Content="Switch Tab" Command="SwitchTabCommand" />
Merci à l'avance mes collègues programmeurs!
EDIT:
Le modèle de vue de la fenêtre:
public class CoolViewModel : BaseViewModel
{
#region Properties
public ObservableCollection<ITabViewModel> Tabs { get; set; }
public ITabViewModel SelectedTab { get; set; }
#endregion
#region Constructor
public CoolViewModel()
{
Tabs = new ObservableCollection<ITabViewModel>
{
new VeryNiceViewModel(),
new VeryNiceViewModel()
};
}
#endregion
}
Voici le code d'un UserControl dans un onglet:
public class VeryCoolViewModel : BaseViewModel, ITabViewModel
{
#region Properties
public ObservableCollection<Test> Tests { get; set; }
public Test currentSelection { get; set; }
public string TabHeader { get; set; }
#endregion
#region Commands
ICommand GoToOtherTab { get; set; }
#endregion
#region Constructor
public GabaritSelecteurViewModel()
{
Tests = new ObservableCollection<Test>
{
new Test { Title = "Title #1" },
new Test { Title = "Title #2" },
new Test { Title = "Title #3" },
new Test { Title = "Title #4" },
new Test { Title = "Title #5" }
};
TabHeader = "Tests";
GoToOtherTab = new RelayCommand(GoToTab, parameter => true);
}
#endregion
#region Methods
private void GoToTab(object parameter)
{
// I don't know how to tell to the
// parent window to go to the other tab...
}
#endregion
}
Et voici le XAML pour le UserControl (à l'intérieur du TabControl):
<Button Content="Go to the other tab" Command="{Binding GoToOtherTab}" />
SelectedIndex est un PITA. Il est toujours plus facile d'utiliser SelectedItem (à condition que votre instance en soit une dans la collection ItemsSource) – Will