我正在与PRISM合作并尝试学习如何正确使用它。到目前为止,我创建了3个视图:
Shell托管一个Region(来自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获取正确的视图? 或者我应该尝试在我的viewmodels中处理那个场景(来自INAVigationAware的OnNavigatedTo)。
答案 0 :(得分:1)
可以通过侦听ActiveViews.CollectionChanged事件来处理激活,然后激活对接控件中的正确选项卡。最好有一个自定义的RegionBehavior为你处理这个,而不是把它放在RegionAdapter中。
您可以使用此博客文章关于为Infragistics xamDockManager编写适配器作为指南:http://brianlagunas.com/xamdockmanager-prism-region-adapter-update-3/
答案 1 :(得分:0)
您可以根据NavigationService的Navigated事件中的Navigation Uri将活动窗口设置为DockingManager。请从以下链接下载示例。 http://www.syncfusion.com/downloads/support/directtrac/172521/ze/PrismUnityApp71278521315.zip