我正在构建一个演示应用程序来学习 Prism 4 的导航功能。该应用程序有两个模块 - 每个模块都有三个视图:
- 带有文本块的用户控件(“欢迎来到模块 A”)
- RibbonTab(使用区域适配器),以及
- Outlook 样式的任务按钮(如 Outlook 的邮件、日历等)
Shell 具有三个命名区域:“RibbonRegion”、“TaskButtonRegion”和“WorkspaceRegion”。视图加载到这些区域中。为了测试基本设置,我向 Prism Region Manager 注册了所有三个视图,以便它们在启动时加载,并且全部按预期工作。
接下来,我修改了设置,以便在启动时仅加载任务按钮。其他视图仅根据请求通过单击任务按钮加载。我的模块初始值设定项如下所示:
public void Initialize()
{
/* We register the Task Button with the Prism Task Button Region because we want it
* to be displayed immediately when the module is loaded, and for the lifetime of
* the application. */
// Register Task Button with Prism Region
m_RegionManager.RegisterViewWithRegion("TaskButtonRegion", typeof(ModuleATaskButton));
/* We register these objects with the Unity container because we don't want them
* instantiated until we navigate to this module. */
// Register View and Ribbon Tab as singletons with Unity container
m_Container.RegisterType(typeof(ModuleAView), "ModuleAView", new ContainerControlledLifetimeManager());
m_Container.RegisterType(typeof(ModuleARibbonTab), "ModuleARibbonTab", new ContainerControlledLifetimeManager());
}
当用户单击任务按钮时,它会调用一个 ICommand 对象,该对象调用IRegionManager.RequestNavigate()
显示视图:
public void Execute(object parameter)
{
// Initialize
var regionManager = m_ViewModel.RegionManager;
// Show Ribbon Tab
var moduleARibbonTab = new Uri("ModuleARibbonTab", UriKind.Relative);
regionManager.RequestNavigate("RibbonRegion", moduleARibbonTab);
// Show View
var moduleAView = new Uri("ModuleAView", UriKind.Relative);
regionManager.RequestNavigate("WorkspaceRegion", moduleAView);
}
单击任务按钮时将调用该命令,但我得到的是:
UserControl 显然是作为System.Object
,我怀疑 RibbonTab 正在加载相同的内容。我认为问题出在我的身上RequestNavigate()
致电,或者我在 Unity 中注册。但我无法识别问题所在。
任何人都可以阐明正在发生的事情吗?感谢您的帮助。