2013-05-03 92 views
0

可以说我有一个MainWindow,并在其中一个网格列,我放置我的UserControl。 用户可以通过按钮单击,选项卡或菜单项来切换此列中的用户控件。在窗口中切换UserControls?

我有3个用户控件:的UserControl1,UserControl2,USerControl3 3周的ViewModels:UserControl1ViewModel,UserControl2ViewModel,UserControl3ViewModel 一个主窗口和MainWindowViewModel

比方说,在此列的默认用户控件中的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> 

的想法是一个莫名其妙的命令绑定到按钮或菜单项来切换用户控件。 该代码将在MainWindowViewModel中处理。

回答

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; } 
    } 

假设你的VM被正确布线,设置DisplayedViewModel至任何三种UserControlViewModel参考的将导致各自UserControl在帧被显示。

+1

你也可以用'的object'代替'IViewModel' – WiiMaxx 2013-05-03 14:55:30

+0

感谢张贴,但我怎么做一个按钮的ICommand改变用户控件 – 2013-05-03 15:12:56

+0

@AnandMurali,我本身喜欢这个displayedViewModel =新ViewModel.UserControl2ViewModel参考() ;并且不起作用 – 2013-05-03 15:34:53