Я работаю с 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).