2017-02-08 3 views
0

Я работаю с PRISM и пытаюсь научиться правильно его использовать. До сих пор я создал 3 вида:Получите представление в собственном регионеAdapter, когда navigatiing с PRISM

  • MainWindow: Это мой Shell Содержит 2 кнопки для навигации: ViewA, ViewB
  • ViewA
  • ViewB

Шелл принимает Регион (DockManager от SyncFusion) для ввода представлений. Внутри ViewModel в доспехах я использую DelegateCommand для навигации:

_regionManager.RequestNavigate("ContentRegion", uri); 

Мнения регистрируются внутри Bootstrapper

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

Это прекрасно работает, когда я использую простой TabControl провести свой регион. Для того, чтобы использовать DockManager из Toolkit Syncfusion я создал адаптер и переопределить функцию:

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. В этом случае представление должно быть установлено как активное. Чтобы достичь этого, я попытался подписаться на «Навигация» в регионе. Правильно ли это будет? Как я могу получить правильный вид из навигационного URI? Или мне следует попробовать обработать этот сценарий внутри моих моделей просмотра (с OnNavigatedTo от InavigationAware).

ответ

1

Активация может быть выполнена путем прослушивания события ActiveViews.CollectionChanged, а затем активировать правильную вкладку в вашем контроле док-станции. Было бы лучше, если бы пользовательский RegionBehavior обрабатывал это для вас вместо того, чтобы помещать его в RegionAdapter.

Вы можете использовать этот блог о написании адаптера для Infragistics xamDockManager в качестве руководства: http://brianlagunas.com/xamdockmanager-prism-region-adapter-update-3/