棱镜请求导航

本文关键字:导航 请求 棱镜 | 更新日期: 2023-09-27 18:25:59

在我的主窗口中,我有一个选项卡控件,我需要通知不同的模块不同的选项卡已被激活或关闭。选项卡控件SelectedItem在我的视图模型中绑定到ActiveView

<TabControl Padding="0"  SelectedItem="{Binding ActiveView}"
                    x:Name="MainViewTab" prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainRegion}"
                    VerticalAlignment="Stretch"
                    ItemContainerStyle="{DynamicResource TabHeaderStyle}" 
                    AutomationProperties.AutomationId="MainViewDeatilTab"        
 />

在区域主要区域我加载不同的视图

 UriQuery parameters = new UriQuery();
            parameters.Add("OBJECTID", item.ObjectId.ToString());
            regionManager.RequestNavigate(RegionNames.MainRegion,
                                            new Uri("AIT.Modules.SiteEditor.Views.SiteEditor" + parameters.ToString(), UriKind.Relative),
                                            NavigationCompleted);

selecteditem绑定到属性ActiveView,在属性中我需要引发一个包含OBJECTID作为参数的事件。

我的问题是,选项卡控件SelectedItem在视图有机会加载OBJECTID参数之前激发,我在Prism OnNavigatedTo中加载该参数。任何人都有关于如何管理选项卡控件打开和关闭事件的示例,以便向其他模块通知当前视图?

棱镜请求导航

如果您不讨厌主窗口中的代码隐藏,您可以通过IRegionNavigationService-属性订阅该区域导航服务的公共Navigated事件。相应的事件处理程序获得导航请求的NavigationContext,从而获得URI。作为折衷方案,您可以将事件处理从主窗口代码后面委托给视图模型。这至少是我曾经使用过的一种方法。

为了避免代码隐藏,您可以为RegionManager编写一个附加属性,为您连接事件和视图模型。

希望这能有所帮助。