【问题标题】:Prism RequestNavigate棱镜请求导航
【发布时间】:2012-03-16 23:00:15
【问题描述】:

在我的主窗口中,我有一个选项卡控件,我需要通知不同的模块不同的选项卡已被激活或关闭。 tabcontrols 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"        
 />

在区域 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);

所选项目绑定到属性 ActiveView,并且在该属性中我需要引发一个包含 OBJECTID 作为参数的事件。

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

【问题讨论】:

    标签: c# wpf prism


    【解决方案1】:

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

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

    希望这会有所帮助。

    【讨论】:

    • 谢谢我用另一种方式解决了它,但你的似乎更好。不知道 NavigatonService
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多