在窗口中切换UserControls?

时间:2013-05-03 14:21:45

标签: wpf mvvm

假设我有一个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中处理。

1 个答案:

答案 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显示在框架中。