내 응용 프로그램에서 mvvm을 사용 중입니다. mvvm 패턴으로 내 사용자 정의 컨트롤을 정의하는 방법을 알고 싶습니다.mvvm 패턴에서 usercontrols를 정의하는 방법은 무엇입니까?
mvvm에서 사용하여 정의해야합니까, 아니면 일반적으로 정의 할 수 있습니까?
내 응용 프로그램에서 mvvm을 사용 중입니다. mvvm 패턴으로 내 사용자 정의 컨트롤을 정의하는 방법을 알고 싶습니다.mvvm 패턴에서 usercontrols를 정의하는 방법은 무엇입니까?
mvvm에서 사용하여 정의해야합니까, 아니면 일반적으로 정의 할 수 있습니까?
사용자 컨트롤에 달려 있다고 생각합니다. 사용자 정의 컨트롤은보기 일 뿐이며이 경우 전체 컨트롤의 일부로이 사용자 정의 컨트롤이있는 큰 컨트롤이나 페이지를 작성하게됩니다. 큰 컨트롤 또는 페이지는이 뷰에 대한 뷰 및 뷰 모델 파트를 제공합니다.
또는 mvvm 및 이벤트를 모두 포함하는 자체 포함 된 사용자 정의 컨트롤을 만들어서 더 큰 사용자 정의 컨트롤과 상호 작용할 수 있습니다.
두 번째 방법으로 재사용과 모듈화가 향상 될 것으로 생각됩니다.
요약하면 다음과 같습니다.
사용자 정의 컨트롤 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>
을에서 어떻게에서 사용 할 수 있습니다 ... 내 컨트롤의 정의 내 제어? 내 속성을 xaml 코드의 컨트롤 뷰 모델에 바인딩하려면 어떻게해야합니까? –
컨트롤의 xaml이 뷰 모델에 바인딩됩니다. 외부 모델의 작업 (더 큰 컨트롤의 모델)은 내부 뷰 모델을 생성하여 내부 뷰/컨트롤의 인스턴스로 전달하는 것입니다. – Rohith
샘플 코드를 제공해 주시겠습니까? –