2011-11-23 2 views
1

저는 (최근) Prism (WPF 응용 프로그램)에 대해 공부하기 시작했으며 팀을 위해 작은 데모 응용 프로그램을 제작했습니다. 내 질문은 다소 일반적인 것이지만 나를 지시 할 수있는 간단한 예제를 찾을 수 없다.
쉘에 (메인 모듈에) 있다고 가정하고, 쉘에 다른 영역의 내용으로 채워야 할 영역이 있다고 가정한다. 모듈 (BTW, 이것이 좋은 생각입니까?).
어떻게 이런 일이 발생합니까? 다른 모듈의 뷰를 쉘의 지정된 영역에 추가하는 일은 누가 담당합니까? 다른 모듈의 관련 뷰 모델이 언제 초기화됩니까? 코드 샘플/링크를 보내 주시면 감사하겠습니다.프리즘, MVVM 및 모듈성

감사합니다.

: 질문이 분리되었습니다. the new question을 참조하십시오.

+0

질문을 나누십시오. 추가 된 부분은 자신의 질문에 들어가야합니다. 그렇지 않으면 여기에 못 생겨 가고 있습니다. – PVitt

+0

네 말이 맞아. – Noich

답변

1

예, 셸과보기를 분리하는 것이 좋습니다.

RegionManager는 영역에보기를 추가합니다. 따라서 RegionManager에 영역을 등록 할뿐만 아니라 RegionManager에보기를 등록합니다.

<Window xmlns:Regions="clr-namespace:Microsoft.Practices.Prism.Regions;assembly=Microsoft.Practices.Prism" 
     xmlns:Inf="clr-namespace:YourNamespace.Infrastructure;assembly=YourNamespaceInfrastructure"> 
    <Grid> 
     <ContentControl 
      Regions:RegionManager.RegionName="{x:Static Inf:RegionNames.MainRegion}"/> 
    </Grid> 
</Window> 

지금 당신이에 상주 할 지역에 대한 뷰를 등록해야합니다 : 당신은 같은 것을 끝낼 것이다 쉘 내부

public class FirstModule : IModule 
{ 
    public void Initialize() 
    { 
     RegionManager.RegisterViewWithRegion(RegionNames.MainRegion, 
      typeof(MainView)); 
     RegionManager.RegisterViewWithRegion(RegionNames.SecondRegion, 
      () => Container.Resolve<ISomethingViewModel>().View); 
    } 
} 

예제 코드는 두 가지 유형을 보여줍니다 등록의. 첫 번째 방법은 뷰의 첫 번째 방법이며, 두 번째 방법은 뷰 모델의 첫 번째 방법입니다.

[편집]

지역 이름이 인프라 모듈에 정적 클래스에 정의되어 있습니다

namespace YourNamespace.Infrastructure 
{ 
    public static class RegionNames 
    { 
     public const string MainRegion = "MainRegion"; 
     //... 
    } 
} 

당신의 부트 스트 래퍼에서 [/ 편집]

+0

감사! 인프라 프로젝트에서 해당 지역의 이름을 정의 하시겠습니까? 그것은 제 모듈에 마술처럼 지역의 이름을 알리는 것보다 훨씬 더 합리적입니다.하지만 정확히 어떻게했는지 모르겠습니다. – Noich

+0

@Noich 예, 지역 이름은 인프라 제공자 어셈블리의 정적 클래스에 있습니다. 업데이트 된 답변을 살펴보십시오. – PVitt

+0

다시 한번 감사드립니다.더 많은 질문과 설명이 필요하시면 원래 게시물의 2 개 편집을 참조하십시오. 도와 주셔서 감사합니다. – Noich

2

사용자가 정의하는 것 응용 프로그램 내에서 사용될 모듈을 나열하는 모듈 카탈로그 (CreateModuleCatalog 무시). 각 모듈에는 모듈 생성시 호출되는 Initialize 메서드가 포함 된 IModule을 구현하는 클래스가 있습니다. 이 안에 당신이 쉘에이 지역에 추가 할 무엇인지 정의 할 :

여기
public void Initialize() 
    { 
     RegisterViewsAndServices(); //Method to register dependencies 
     IMyViewModel model = _container.Resolve<IMyViewModel>(); 
     _regionManager.Regions[RegionNames.ShellHeaderRegion].Add(model); 
    } 

내가 쉘에 뷰 모델을 추가하고 난 그 외부에 정의 된 리소스 사전을보기가 적용되어야 하는지를 결정 DataTemplate을 통해.

프리즘 문서 (특히 2 장)에는이 문제에 대한 유용한 정보가 많이 있습니다. http://msdn.microsoft.com/en-us/library/gg406140.aspx

관련 문제