棱镜请求导航
本文关键字:导航 请求 棱镜 | 更新日期: 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中加载该参数。任何人都有关于如何管理选项卡控件打开和关闭事件的示例,以便向其他模块通知当前视图?
如果您不讨厌主窗口中的代码隐藏,您可以通过IRegion
的NavigationService
-属性订阅该区域导航服务的公共Navigated
事件。相应的事件处理程序获得导航请求的NavigationContext
,从而获得URI。作为折衷方案,您可以将事件处理从主窗口代码后面委托给视图模型。这至少是我曾经使用过的一种方法。
为了避免代码隐藏,您可以为RegionManager编写一个附加属性,为您连接事件和视图模型。
希望这能有所帮助。