2017-02-08 1 views
0

PRISM과 함께 작업하고 올바르게 사용하는 방법을 배우려고합니다. 에서 ViewA, ViewB PRISM으로 이동할 때 자신의 RegionAdapter에서보기 가져 오기

  • ViewA
  • ViewB
  • 쉘이 지역을 호스트

    을 (DockManager :

    • MainWindow를 : 이것은 탐색을 위해이 개 버튼을 포함하는 내 쉘입니다 지금까지 나는 3 뷰를 생성 SyncFusion)을 사용하여 뷰를 삽입합니다.

      _regionManager.RequestNavigate("ContentRegion", uri); 
      

      보기는 부트 스트 래퍼

      Container.RegisterTypeForNavigation<ViewA>("ViewA"); 
      Container.RegisterTypeForNavigation<ViewB>("ViewB"); 
      

      내부에 등록 된 내 영역을 호스트하는 간단한을 TabControl을 사용하는 경우이 잘 작동 : 셸의 뷰 모델 내부 내가 이동하는 DelegateCommand를 사용합니다. SyncFusion 툴킷에서 DockManager를 사용하려면 내가 어댑터를 생성하고 함수 재정의 :

      protected override void Adapt(IRegion region, DockingManager regionTarget) 
          { 
           region.Views.CollectionChanged += delegate 
           { 
            foreach (var child in region.Views.Cast<UserControl>()) 
            { 
             if (!regionTarget.Children.Contains(child)) 
      
             { 
              regionTarget.BeginInit(); 
              regionTarget.Children.Add(child); 
              regionTarget.EndInit(); 
             } 
            } 
           }; 
           regionTarget.WindowClosing += delegate (object sender, WindowClosingEventArgs args) 
           { 
            var child = args.TargetItem as UserControl; 
            region.Remove(child); 
           }; 
           regionTarget.CloseButtonClick += delegate (object sender, CloseButtonEventArgs args) 
           { 
            var child = args.TargetItem as UserControl; 
            region.Remove(child); 
           }; 
      
           region.NavigationService.Navigated += RegionTarget_Navigated;   
          } 
      private void RegionTarget_Navigated(object sender, RegionNavigationEventArgs e) 
          { 
      
          } 
      

      는 내가 지금 처리하려고하는 것은보기가 이미 내 DockingManager에 포함되어있는로 탐색하는 경우입니다. 이 경우 뷰는 활성으로 설정되어야합니다. 이를 달성하기 위해 지역의 'Navigated'이벤트에 가입하려했습니다. 이것이 올바른 방법일까요? Navigation-URI에서 올바른보기를 얻으려면 어떻게해야합니까? 또는 (INavigationAware의 OnNavigatedTo를 사용하여) 내 viewmodels에서 해당 시나리오를 처리해야합니까?

    답변

    1

    활성화는 ActiveViews.CollectionChanged 이벤트를 수신 한 다음 도킹 컨트롤에서 올바른 탭을 활성화하여 처리 할 수 ​​있습니다. 사용자 정의 RegionBehavior가 RegionAdapter에 배치하는 대신 사용자 대신이를 처리하도록하는 것이 좋습니다.

    당신은 가이드로 Infragistics의 xamDockManager에 대한 어댑터 작성에 대한이 블로그 게시물을 사용할 수 있습니다 http://brianlagunas.com/xamdockmanager-prism-region-adapter-update-3/

    관련 문제