2012-03-03 6 views

답변

2

사용자 컨트롤에 달려 있다고 생각합니다. 사용자 정의 컨트롤은보기 일 뿐이며이 경우 전체 컨트롤의 일부로이 사용자 정의 컨트롤이있는 큰 컨트롤이나 페이지를 작성하게됩니다. 큰 컨트롤 또는 페이지는이 뷰에 대한 뷰 및 뷰 모델 파트를 제공합니다.

또는 mvvm 및 이벤트를 모두 포함하는 자체 포함 된 사용자 정의 컨트롤을 만들어서 더 큰 사용자 정의 컨트롤과 상호 작용할 수 있습니다.

두 번째 방법으로 재사용과 모듈화가 향상 될 것으로 생각됩니다.

요약하면 다음과 같습니다.

+0

을에서 어떻게에서 사용 할 수 있습니다 ... 내 컨트롤의 정의 내 제어? 내 속성을 xaml 코드의 컨트롤 뷰 모델에 바인딩하려면 어떻게해야합니까? –

+0

컨트롤의 xaml이 뷰 모델에 바인딩됩니다. 외부 모델의 작업 (더 큰 컨트롤의 모델)은 내부 뷰 모델을 생성하여 내부 뷰/컨트롤의 인스턴스로 전달하는 것입니다. – Rohith

+0

샘플 코드를 제공해 주시겠습니까? –

3

사용자 정의 컨트롤 MainWindow를 포함하는 컨트롤을 호출하고 사용자 컨트롤 UserControl을 호출합니다. MVVM 패턴을 사용하기 때문에 외부 뷰에 대한 View Model이 하나 이상 있어야합니다. 일반적으로 MainVm이라는 이름을 사용합니다. 사용자 정의 컨트롤에는 두 가지 옵션이 있습니다. 즉, UserControl (UserVm)과 동일한 View Model을 공유하거나 하위 뷰 모델을 가질 수 있습니다.

첫 번째 선택 사항은 아무 것도 수행하지 않습니다. UserControl (Visual Studio '새 항목 추가'-> User Control은 꽤 좋은 시작입니다)을 정의합니다. 그런 다음, 메인 윈도우에 간단히 임베드합니다.

<Window 
    x:Class="SO.MainWindow" 
    ... 
    xmlns:src="clr-namespace:SO" 
    ... 
    > 
    ... 
    <src:UserControl /> 
    ... 
</Window> 

의 UserControl MainWindow를에서 같은 DataContext를 상속하고, 할 모든 당신이 MainWindow를에서하는 것처럼 {바인딩}.

하위보기 모델 (UserVm)을 갖고 싶다면 일반적으로 MainVm의 public 속성입니다 (예 : userVm). 이 경우 UserControl을 참조 할 때 DataContext를 설정합니다.

<src:UserControl DataContext="{Binding Path=userVm}" /> 

또 다른 인기있는 패러다임은 UserControl 대신 DataTemplate을 선언하는 것입니다. 당신은, 당신은 단지합니다 (XAML에서 인스턴스화 또는 바인딩을 통해 중 하나)을 UserVm을 둘 필요가 있다고 할 경우 : 내가 MVVM에서 사용하는 경우

<Window x:Class="MainWindow" ...> 
    <Window.Resources> 
     <DataTemplate x:Key="UserDt"> <!-- or user TargetType instead of x:Key --> 
      ... 
     </DataTemplate> 
    </Window.Resources> 

    ... 

    <!-- You can put in a ContentControl like here: --> 
    <ContentControl Content="{Binding Path=userVm}" 
        ContentTemplate="{StaticResource UserDt}" /> 

    <!-- or, if you defined TargetType for the DT, you can simply instantiate 
     the sub VM here. I don't like this apporach but it exists. --> 
    <src:UserVm /> 
</Window> 
관련 문제