2016-07-28 2 views
0

저는 C# WPF 응용 프로그램에서 작업하고 있습니다. 각 사용자에 대한 ViewModel을 갖는 UC1, UC2 및 UC3 사용자 컨트롤 목록입니다. 내부적으로 다른 공통 참조 UCB라는 사용자 정의 컨트롤. 그리고 내 App.xaml은 MainWindow.xml을 참조합니다.드롭 다운의 값이 변경 될 때 Mainwindow에서 사용자 컨트롤을 동적으로로드합니다.

UCB에는 다른 계정 유형의 이름을 가진 드롭 다운 목록이 있습니다.

기본 사용자 정의 컨트롤 UCB에서 선택한 계정 유형에 따라 프로그래밍 방식으로 MainWindow에서 사용자 정의 컨트롤을 표시해야합니다. 어떻게 구현합니까?

내 생각은 지금까지 : 는 다음과 같이 파일 내가 MainWindow.xaml.cs를 모두 내 사용자 컨트롤을 인스턴스화 할 수 있음 :

UserControl uc1 = (UserControl)assembly.CreateInstance(string.Format("{0}.MyUC1", type.Namespace)); 
    UserControl uc2 = (UserControl)assembly.CreateInstance(string.Format("{0}.MyUC2", type.Namespace)); 

userControls.Add("1", uc1); 
userControls.Add("2", uc2); 

을 한 후 원하는 사용자를 설정 MainWindow.xaml의 컨텐츠 속성을 사용하여 드롭 다운 값을 기반으로 컨트롤.

this.Content = userControls["1"]; 

그러나 UCB 컨트롤의 ComboBox_SelectionChanged 이벤트에서이 콘텐츠 속성에 액세스하려면 어떻게해야합니까 ??

알려 주시기 바랍니다.

감사합니다. 당신이 Objact 속성을 가지고 있어야 당신의 UCB의 ViewModel에서

<ContentPresenter Content="{Binding CurrentViewModel}"> 
    <ContentPresenter.Resources> 
      <DataTemplate DataType="{x:Type ViewModel:UC1VM}"> 
       <Views:UC1/> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type ViewModel:UC2VM}"> 
       <Views:UC2/> 
      </DataTemplate> 
     </ContentPresenter.Resources> 
</ContentPresenter>  

:

답변

1

당신은 ContentControl/ContentPresenter 당신이 예를 들어 당신의 UserControls

에 대해 서로 다른 뷰 모델이 희망 추가하여 Dropdown 선택에 따라보기를 전환 할 수 있습니다 아래와 같이,

private object _CurrentViewModel; 
public object CurrentViewModel 
{ 
     get { return _CurrentViewModel; } 
     set { _CurrentViewModel = value; NotifyPropertyChanged(); } 
} 

이제 y DropDown에서 항목을 선택하면 해당 ViewModel이 표시되어 View이 표시됩니다. 새로 만든 ViewModelCurrentViewModel을 할당하십시오. 원하는 것을 표시합니다 View

+0

입력하신 내용을 감사드립니다. 그리고 MainWindow.xaml에 기본 컨트롤을 어떻게로드합니까? –

+0

메인 윈도우에 그리드를 배치하면됩니다. 행과 열을 만들고 표시 할 기본 컨트롤을 지정하십시오. DefaultControl DataContext = "{binding defaultViewModel}"Grid.Column = "2"/>' –

+0

Ok.Also에서 콘텐트 제어 코드는 어디에 배치해야합니까? MainWindow에 있나요? –

관련 문제