Я создаю демонстрационное приложение, чтобы изучить навигационные функции Prism 4. Приложение имеет два модуля - у каждого из них три вида:
- UserControl с текстовым блоком («Добро пожаловать в модуль A»)
- RibbonTab (с использованием адаптера региона) и
- Кнопка задач в стиле Outlook (например, почта, календарь и т. Д.)
Оболочка имеет три именованные области: «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);
}
Команда вызывается при нажатии кнопки «Задача», но я получаю следующее:
![Demo app screen shot](https://i.stack.imgur.com/dcZTb.png)
UserControl, очевидно, загружается как System.Object
, и я подозреваю, что RibbonTab загружает то же самое. Я думаю, что проблема в моем RequestNavigate()
звонке или регистрации в Unity. Но я не могу определить проблему.
Может кто-нибудь пролить свет на то, что происходит? Спасибо за вашу помощь.