从Child UserControl更改MainWindow中的TabControl的SelectedIndex
我有一个主窗口,其中有一个TabControl
。每个选项卡都包含与其关联的UserControl
。在我的UserControl
之一中,我有一个按钮。当我点击按钮时,我想要更改我主窗口中的TabControl
的SelectedIndex
。从Child UserControl更改MainWindow中的TabControl的SelectedIndex
我正在使用MVVM模式,所以如果可能的话,我想在XAML中使用我的按钮上的Command属性。
例如:
<Button Content="Switch Tab" Command="SwitchTabCommand" />
在此先感谢我的同胞的程序员!
编辑:
的窗口视图模式:
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}" />
给孩子视图模型公共财产
ICommand SwitchTabCommand { get {} set { /* INPC stuff */ } }
将其绑定到该用户控件XAML按钮的命令属性。
父视图模型可以在创建子视图模型时向该属性分配命令。您可以将父vm属性绑定到选项卡控件上的SelectedIndex,并且父级创建的命令可以设置绑定父级viewmodel属性。
如果您不打算使用MVVM,并且没有用于usercontrol的子视图模型,请将command属性设置为usercontrol的依赖项属性,并将其绑定到窗口XAML中的父视图模型命令属性。
我试图做这样的事情,但我从来没有设法使它工作。它总是告诉我,UserControl或Window都是空的。我认为这是由他们正在创建的顺序造成的。 – Fred
@Fred这听起来很容易修复。让我们看看代码。 –
SelectedIndex是一个PITA。使用SelectedItem总是更容易(只要你的实例是ItemsSource集合中的一个) – Will