我正在使用 PRISM 并尝试学习如何正确使用它。到目前为止,我创建了 3 个视图:
- MainWindow:这是我的外壳,包含 2 个导航按钮:ViewA,ViewB
- 视图A
- 视图B
Shell 托管一个区域(来自 SyncFusion 的 DockManager)来注入视图。在 Shell 的 ViewModel 中,我使用 DelegateCommand 进行导航:
_regionManager.RequestNavigate("ContentRegion", uri);
视图在 Bootstrapper 中注册
Container.RegisterTypeForNavigation<ViewA>("ViewA");
Container.RegisterTypeForNavigation<ViewB>("ViewB");
当我使用简单的 TabControl 来托管我的区域时,这可以正常工作。为了使用 SyncFusion Toolkit 中的 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 中。在这种情况下,应将视图设置为活动的。为此,我尝试订阅该地区的“导航”事件。这是正确的方法吗?如何从 Navigation-URI 获得正确的视图?或者我应该尝试在我的视图模型中处理该场景(使用来自 INavigationAware 的 OnNavigatedTo)。