私はTabControl
のメインウィンドウを持っています。各タブには、UserControl
が関連付けられています。 UserControl
の1つで、ボタンがあります。ボタンをクリックすると、私のメインウィンドウにあるTabControl
のSelectedIndex
を変更したいと思います。ChildControlからMainWindowのTabControlのSelectedIndexを変更します。
私はMVVMパターンを使用していますので、可能であれば、ボタンのCommandプロパティでXAMLでやりたいと思います。例えば
:事前に
<Button Content="Switch Tab" Command="SwitchTabCommand" />
おかげで私の仲間のプログラマー!
EDIT:
ウィンドウのビューモデル:
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
}
ここでは、タブ内のユーザーコントロールのコードです:
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
}
そして、ここでユーザーコントロールのためのXAMLは、(ですTabControlの内部にあります)。
<Button Content="Go to the other tab" Command="{Binding GoToOtherTab}" />
SelectedIndexはPITAです。 SelectedItemを使うほうがずっと簡単です(インスタンスがItemsSourceコレクション内にある限り) – Will