2013-05-03 123 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