2010-04-18 1 views
5

그래서 MVVM 라이트 프레임 워크에서 표준 뷰를 모델링하는 데 DataTemplate 정의를 사용하는 것으로 보입니다. 매핑은 어디에 위치해야합니까? 다음은 내가 지금하고있는 일의 예이며 내가 말하는 것은 혼합 가능성이 내게 중요하다는 것입니다!중첩 된 뷰를 정의하기위한 표준 규칙은 무엇입니까? MVVM Light에서의 뷰 모델 매핑

메인 창 :

public ApplicationManagementViewModel ApplicationManagementViewModel {get {...} set {...} } 

내가 ResourceDictionary에 "ViewMappings.xaml 참조 : 위의 코드에서

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     x:Class="STS2Editor.MainWindow" 
     Title="{Binding ApplicationTitle, Mode=OneWay}" 
     DataContext="{Binding RootViewModel, Source={StaticResource Locator}}"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Skins/ApplicationSkin.xaml" /> 
       <ResourceDictionary Source="Resources/ViewMappings.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 
    <Grid> 
     <ContentControl Content="{Binding ApplicationManagementViewModel}" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
    </Grid> 
</Window> 

내 RootViewModel 클래스는 동일한 속성 이름을 가진 클래스 ApplicationManagementViewModel의 인스턴스가 "내 뷰 모델을 뷰로 표현하는 방법을 지정합니다.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:STS2Editor.ViewModel"> 
    <DataTemplate DataType="{x:Type local:ApplicationManagementViewModel}"> 
     <local:ApplicationManagementView/> 
    </DataTemplate> 
</ResourceDictionary> 

ViewModelLocator를 사용하면 어떻게해야합니까? 뷰 모델 모음은 어떻습니까?

+0

MVVM의 큰 문제점 중 하나는 통합 된 방법론이 부족하다는 점입니다. – Firoso

+0

MVVM 자체의 문제라고 생각하지 않습니다. 여러 구현을 가진 패턴입니다. MVC 또는 다른 것과 동일합니다. 나는 그것이 문제라고 생각하지 않는다. 그것은 정말로 상황과 당신이 풀려고하는 문제에 달려있다. – LBugnion

+0

나는 비슷한 질문을한다. 그래서 DataTemplates는 WPF에 충분합니다. 나는 프리즘 영역 유형을 원하지만 프리즘은 없다. – nportelli

답변

4

(암시 적으로 형식화 된 DataTemplates와 함께) 사용하는 메서드는 WPF에서 제대로 작동하지만 불행히도 Silverlight에서는 작동하지 않습니다. 이것이 내가 두 세계에서 작동하는 더 명확한 방법을 사용하는 것을 선호하는 이유 중 하나입니다.

또한 암시 적으로 형식화 된 DataTemplates는 약간 혼란 스러울 수 있습니다. 템플릿이 어디서 왔는지 항상 명확하지 않기 때문입니다. 이는 특히 UI의 작은 변경 사항을 위해 통합 자의 작업을 매우 어렵게 만들 수 있습니다. (완료되었습니다. :)

MVVM Light에서 ViewModelLocator를 사용할 의무는 없습니다. 잘 작동하고 이해하기 쉽습니다 (사람들이 WPF/SL의 미묘함에 익숙하지 않은 코드를 읽는 경우). 결국, 그것은 매우 중요한 사항이지만 ViewModelLocator 패턴은 인기를 얻고 있습니다 (예를 들어 MEF와 함께 일반 ViewModelLocator가 사용되는이 게시물을 참조하십시오).

http://www.johnpapa.net/simple-viewmodel-locator-for-mvvm-the-patients-have-left-the-asylum/

마지막으로, 제가 MVVM 빛의 ViewModelLocator의 현재 구현에 매우 만족하지 오전 추가 할 수 있도록, 나는 다음 버전에서 훨씬 더 일반적인 솔루션을 제안합니다.

+0

링크가 깨졌습니다. – vidstige

관련 문제