2013-05-03 4 views
0

MainWindow가 있고 그 중 하나의 격자 열에 UserControl을 배치한다고 가정 해 보겠습니다. 그리고 사용자는 버튼 클릭, 탭 또는 menuItem을 사용하여이 열의 usercontrol을 전환 할 수 있습니다. UserControl1을, UserControl2를, USerControl3 3 ViewModels : 창에서 UserControls를 전환 하시겠습니까?

나는 3에 추가 된 UserControls이 UserControl1ViewModel, UserControl2ViewModel, UserControl3ViewModel MainWindow를하고

가이 칼럼의 기본 UserControl을가 UserControl1을 말할 수있는 MainWindowViewModel. 단추를 클릭하여 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> 

아이디어는 어떻게 든 된 UserControls 전환 버튼 또는의 MenuItem에 명령을 결합하는 것입니다. 코드는 MainWindowViewModel에서 처리 될 것입니다. 프레임 내용에

private Object _DisplayedViewModel; 

    public Object DisplayedViewModel 
    { 
     get { return _DisplayedViewModel; } 
     set 
     { 
      _DisplayedViewModel = value; 
      // Your INotifyPropertyChanged notification 
      //RaisePropertyChanged("DisplayedViewModel"); 
     } 
    } 
MainWindow.xaml에서

, 결합 DisplayedViewModel을 다음과 같이 MainViewModel에서

답변

0

표시된 ViewModel를 개최 속성을 만들 수 있습니다. 하여 VM을 가정

private ICommand _ShowUC2; 

    public ICommand ShowUC2 
    { 
     get { 
      if (_ShowUC2 == null) 
      { 
       _ShowUC2 = new RelayCommand() => 
       { 
        DisplayedViewModel = new UserControl2ViewModel(); 
       }; 
      } 
      return _ShowUC2; } 
    } 

바인딩 버튼 명령

<Frame Content="{Binding DisplayedViewModel}" NavigationUIVisibility="Hidden"/> 

세 UserControlViewModel 기준 중 임의의 DisplayedViewModel가 각각 UserControl 프레임에 표시되도록한다 설정 올바르게 배선되어있다.

+1

당신은 또한) (나는 버튼 ICommand의, 나는 본질적으로이 displayedViewModel = 새로운 ViewModel.UserControl2ViewModel 같은 기준 UserControl을 – WiiMaxx

+0

감사를 사용할 수 있지만, ; 그리고 작동하지 않는다. –

+0

@AnandMurali을 변경하려면 어떻게해야합니까, 게시'object' 대신 IViewModel''의 –

관련 문제