在我的主窗口中,我有一个标签控件,我需要通知不同的模块已激活或关闭了不同的标签。 tabcontrols SelectedItem绑定到我的viewmodel
中的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"
/>
在Mainregion区域,我加载了不同的视图
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作为参数的事件。
我的问题是tabcontrols SelectedItem在视图有机会加载OBJECTID参数之前触发,我在Prism OnNavigatedTo中加载它。任何人都有一个关于如何管理tabcontrols打开和关闭事件的示例,以便其他模块可以通知当前视图?
答案 0 :(得分:2)
如果您不在主窗口中讨厌代码隐藏,您可以订阅该地区导航服务的公开Navigated
事件,可以通过NavigationService
- 属性访问该事件IRegion
。相应的事件处理程序获取导航请求的NavigationContext
,从而获取URI。
作为妥协,您可以将事件处理从主窗口代码委托委托给您的viewmodel。
这至少是我曾经使用过的一种方法。
为避免代码隐藏,您可以为RegionManager编写附加属性,为您执行事件和viewmodel之间的连接。
希望这有帮助。