首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PRISM导航时,在自己的RegionAdapter中获取视图

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

Stack Overflow用户
提问于 2017-02-08 14:28:37
回答 2查看 325关注 0票数 0

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

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

Shell承载要向其中注入视图的区域(从DockManager到SyncFusion)。在Shell的ViewModel中,我使用一个DelegateCommand导航:

代码语言:javascript
复制
_regionManager.RequestNavigate("ContentRegion", uri);

视图在Bootstrapper中注册

代码语言:javascript
复制
Container.RegisterTypeForNavigation<ViewA>("ViewA");
Container.RegisterTypeForNavigation<ViewB>("ViewB");

当我使用一个简单的TabControl来托管我的区域时,这是很好的。要使用DockManager工具包中的SyncFusion,我创建了一个适配器并重写了该函数:

代码语言:javascript
复制
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中。在这种情况下,视图应该设置为active。为了实现这一点,我尝试订阅该地区的“导航”事件。这是正确的方法吗?如何从导航URI获得正确的视图?或者我应该尝试在我的视图模型中处理这个场景(使用来自OnNavigatedTo的INavigationAware)。

EN

回答 2

Stack Overflow用户

发布于 2017-02-08 15:15:12

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

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

票数 1
EN

Stack Overflow用户

发布于 2017-02-20 05:43:35

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42115819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档