Получите представление в своем собственном RegionAdapter при навигации по PRISM
Я работаю с PRISM и пытаюсь научиться правильно его использовать. Пока что я создал 3 вида:
- MainWindow: это моя оболочка, содержащая 2 кнопки для навигации: ViewA, ViewB
- ViewA
- ViewB
В командной консоли размещается регион (DockManager из SyncFusion) для добавления представлений. Внутри ViewModel оболочки я использую DelegateCommand для навигации:
_regionManager.RequestNavigate("ContentRegion", uri);
Представления зарегистрированы внутри Bootstrapper
Container.RegisterTypeForNavigation<ViewA>("ViewA");
Container.RegisterTypeForNavigation<ViewB>("ViewB");
Это прекрасно работает, когда я использую простой TabControl для размещения моего региона. Чтобы использовать DockManager из SyncFusion Toolkit, я создал адаптер и переопределил функцию:
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. В этом случае представление должно быть установлено как активное. Чтобы добиться этого, я попытался подписаться на "Навигацию" - событие региона. Будет ли это правильный путь? Как я могу получить правильный вид из Navigation-URI? Или я должен попытаться обработать этот сценарий в моих моделях представления (с OnNavigatedTo от INavigationAware).
2 ответа
Активация может быть обработана путем прослушивания события ActiveViews.CollectionChanged, а затем активации правильной вкладки в вашем элементе управления стыковкой. Было бы лучше иметь собственный обработчик RegionBehavior для вас, а не помещать его в RegionAdapter.
Вы можете использовать этот пост в блоге о написании адаптера для Infragistics xamDockManager в качестве руководства: http://brianlagunas.com/xamdockmanager-prism-region-adapter-update-3/
Вы можете установить активное окно в DockingManager на основе URI навигации из события Navigated NavigationService. Пожалуйста, скачайте образец по следующей ссылке. http://www.syncfusion.com/downloads/support/directtrac/172521/ze/PrismUnityApp71278521315.zip