假设我有一个MainWindow,并且在其中有一个Grid Column,我放置了UserControl。 用户可以通过单击按钮,选项卡或menuItem来切换此列中的用户控件。
我有3个userControls:UserControl1,UserControl2,USerControl3 3 ViewModels:UserControl1ViewModel,UserControl2ViewModel,UserControl3ViewModel MainWindow和MainWindowViewModel
让我们说在这个列中,默认的userControl是UserControl1。如何通过按钮单击到UserControl2来切换它。
我发现了一些这样的资源:
<Window.Resources>
<DataTemplate DataType="{x:Type vm:UserControl1ViewModel}">
<v:UserControl1 />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:UserControl2ViewModel}">
<v:UserControl1 />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:UserControl3ViewModel}">
<v:UserControl3/>
</DataTemplate>
</Window.Resources>
这个想法是以某种方式将Command绑定到Button或MenuItem以切换UserControls。 该代码将在MainWindowViewModel中处理。
答案 0 :(得分:0)
在MainViewModel中创建一个属性来保存显示的ViewModel
,如下所示
private Object _DisplayedViewModel;
public Object DisplayedViewModel
{
get { return _DisplayedViewModel; }
set
{
_DisplayedViewModel = value;
// Your INotifyPropertyChanged notification
//RaisePropertyChanged("DisplayedViewModel");
}
}
在MainWindow.xaml
中,将DisplayedViewModel
绑定到帧内容。
<Frame Content="{Binding DisplayedViewModel}" NavigationUIVisibility="Hidden"/>
用于按钮命令绑定
private ICommand _ShowUC2;
public ICommand ShowUC2
{
get {
if (_ShowUC2 == null)
{
_ShowUC2 = new RelayCommand() =>
{
DisplayedViewModel = new UserControl2ViewModel();
};
}
return _ShowUC2; }
}
假设您的虚拟机连接正确,将DisplayedViewModel
设置为三个UserControlViewModel引用中的任何一个将导致相应的UserControl
显示在框架中。