Prism RequestNavigate

时间:2012-02-27 13:10:27

标签: c# wpf prism

在我的主窗口中,我有一个标签控件,我需要通知不同的模块已激活或关闭了不同的标签。 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打开和关闭事件的示例,以便其他模块可以通知当前视图?

1 个答案:

答案 0 :(得分:2)

如果您不在主窗口中讨厌代码隐藏,您可以订阅该地区导航服务的公开Navigated事件,可以通过NavigationService - 属性访问该事件IRegion。相应的事件处理程序获取导航请求的NavigationContext,从而获取URI。 作为妥协,您可以将事件处理从主窗口代码委托委托给您的viewmodel。 这至少是我曾经使用过的一种方法。

为避免代码隐藏,您可以为RegionManager编写附加属性,为您执行事件和viewmodel之间的连接。

希望这有帮助。