2012-01-10 3 views
1

MEF와 함께 PRISM 4.0을 컨테이너로 사용하고 있습니다. 내 셸에서 ToolBar 및 MainRegion 2 개의 영역을 정의했습니다. 툴바 영역은 사용자 정의 RegionBehaviour - AutoPopulateExportedViewsBehaviour를 사용하여 자동으로 ToolBarModule로 채워집니다. 내 MainRegion에는 타사 독 레이아웃 관리자를 통해 도킹 될 View 모듈이 1 개 이상 포함될 수 있습니다.MEF 및 MVVM을 사용하여 툴바에 PRISM 모듈을 추가하는 방법

내 응용 프로그램에서 사용 가능한보기를 나타 내기 위해 도구 모음 단추를 만드는 데 문제가 있습니다. 제 생각은 ToolBarService 또는 Event 패턴을 사용하여 각 View 모듈이 자체적으로 ToolBar에 등록되지 않도록하는 것이 었습니다.

그러나 그들이 도구 모음에 등록 할 수 있도록

가 어떻게 내 모듈의 초기화를 제어 할 수 있습니다 ... 내가 RegionManager.RegisterViewWithRegion 호출 할 때까지 내보기 모듈 생성자가 호출되지 않습니다 보인다. 따라서 버튼을 추가 할 수는 있지만 실제로 뷰 자체를 표시 할 수는 없습니다. 보기는 방금 등록한보기가 클릭 된 경우에만 표시됩니다.

감사

+0

팁 주셔서 감사합니다. 내가 그 일을해야한다는 것을 깨닫지 못했습니다. – user630190

답변

0
가 도구 모음에 등록하지만이 초기에는 더 표시 할 수 있도록

가 어떻게 내 모듈의 초기화를 제어 할 수 있습니다

?

나는 그게 무슨 뜻인지 잘 모르겠습니다.

모듈을로드 할 때 자신의 탐색 부분을 등록하고 싶다고 생각합니다. 나는 상단에 메뉴 막대가 있고 아래에 단추 막대가있는 비슷한 시나리오가 있습니다. 로드 된 각 모듈은 - 그것은 초기화 코드를 사용하여 자신의 버튼/메뉴의 삽입 :

public void Initialize() 
     { 
      this.RegionManager.RegisterViewWithRegion(RegionNames.Menu, typeof(NavigationView)); 
      this.RegionManager.RegisterViewWithRegion(RegionNames.Toolbar, typeof(ToolbarNavigationView)); 
     } 

그 영역은 실제 버튼/다른 통화 뭔가를 누르면 항목이있다. examle를 들어, 여기 그것은 내가 내보기 모듈의 "힘"생성자가 사용자 정의 RegionBehaviour를 사용하여 호출 할 수 있습니다처럼 보이는 NavigationViewModel

namespace IDATT.Module.SystemManager.ViewModels 
{ 
    using System; 
    using System.ComponentModel.Composition; 

    using Microsoft.Practices.Prism.Regions; 

    [Export] 
    public class NavigationViewModel 
    { 
     [Import] 
     public ISecurityService SecurityService { get; set; } 

     [Import] 
     public IRegionManager RegionManager { get; set; } 

     public void Mail() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MailView).Name, UriKind.Relative)); 
     } 

     public void MaintainUser() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MaintainUserView).Name, UriKind.Relative)); 
     } 

     public void MaintainGroup() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MaintainGroupView).Name, UriKind.Relative)); 
     } 

     public void MaintainMailTemplate() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MaintainMailTemplateView).Name, UriKind.Relative)); 
     } 

     public void SetUpOptions() 
     { 
      this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(SetUpSystemManagerOptionsView).Name, UriKind.Relative)); 
     } 

     public void Logout() 
     { 
      this.SecurityService.Logout(); 
     } 
    } 
} 
+0

안녕하세요, 카티. 도와 줘서 고마워. 내 질문에 대해 조금 더 명확하게 다시 말하겠습니다. 본질적으로 내가 만들고있는 것은 비어있는 응용 프로그램이며 사용할 수있는 단추와 뷰를 알지 못합니다. 이것은 내 프레임 워크의 사용자가 결정할 것입니다. 필요한 것은 도구 모음에 버튼을 추가하는 방법입니다. 이 버튼을 클릭하면보기가로드됩니다. RegionManager.RegisterViewWithRegion을 호출 할 때까지 내보기 모듈 생성자가 호출되지 않는 것 같습니다 ... 내보기 모듈의 수명주기를보다 잘 제어하고 싶습니다. 희망은 그것을 명확하게합니다. Thankss – user630190

+0

버튼이 "마법처럼"나타나는 이유는 아직 불분명합니다. 사용자가 'RegisterViewWithRegion'에 코드를 작성하고 해당 버튼을 표시 할 때 사용자가 사용할 수있는 것을 선택하게하는 경우 해당 설정을 사용하게하십시오. – katit

+0

안녕하세요 Katit, 내가 쓴 것은 툴바 영역과 주 영역이 포함 된 일반적인 프레임 워크입니다. 콘텐츠 사용자는이 프레임 워크를 사용하여 자체보기 모듈을 작성합니다. 주 영역은 동시에 여러 개의보기 모듈을 호스팅 할 수 있으며 다양한 구성으로 도킹 할 수 있습니다. 내가 노출해야하는 것은 콘텐츠 사용자가보기 모듈을 시작할 수있는 툴바에 버튼을 만드는 방법이었습니다.아마 나는 이것에 대해 잘못된 길을 가고있을 것이지만 그것은 커스텀 지역 행동으로 이제는 작동하는 것처럼 보인다. 그것 없이는 생성자가 호출되지 않습니다. – user630190

0

입니다. 이 내부에서 뷰 모듈을 특정 기본 뷰 또는 인터페이스 유형으로 캐스팅하고 함수를 호출 할 수 있습니다. 그러면 내보기가 툴바에 등록되지만 반드시 내 응용 프로그램의 "기본"영역에보기가 표시되지는 않습니다.

도움 주셔서 감사합니다.

관련 문제