在使用PRISM导航时,在自己的RegionAdapter中获取视图

时间:2017-02-08 14:28:38

标签: wpf prism syncfusion docking regionadapter

我正在与PRISM合作并尝试学习如何正确使用它。到目前为止,我创建了3个视图:

  • MainWindow:这是我的Shell包含2个导航按钮:ViewA,ViewB
  • ViewA
  • ViewB

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)。

2 个答案:

答案 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