0

我正在使用 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)。

4

2 回答 2

1

可以通过侦听 ActiveViews.CollectionChanged 事件来处理激活,然后激活停靠控件中的正确选项卡。最好有一个自定义的 RegionBehavior 为您处理这个,而不是把它放在 RegionAdapter 中。

您可以使用这篇关于为 Infragistics xamDockManager 编写适配器的博客文章作为指南:http ://brianlagunas.com/xamdockmanager-prism-region-adapter-update-3/

于 2017-02-08T15:15:12.493 回答
0

您可以根据 NavigationService 的 Navigated 事件中的 Navigation Uri 将活动窗口设置为 DockingManager。请从以下链接下载示例。 http://www.syncfusion.com/downloads/support/directtrac/172521/ze/PrismUnityApp71278521315.zip

于 2017-02-20T05:43:35.743 回答