Я создаю демонстрационное приложение, чтобы изучить навигационные функции Prism 4. Приложение имеет два модуля: каждый из них имеет три вида:
- Пользовательский элемент управления с текстовым блоком ( "Добро пожаловать в модуль А" )
- A RibbonTab (с использованием адаптера области) и
- Кнопка задачи в стиле Outlook (например, Outlook Mail, Календарь и т.д.)
Оболочка имеет три именованные области: "RibbonRegion", "TaskButtonRegion" и "WorkspaceRegion". Представления загружаются в эти регионы. Чтобы проверить базовую настройку, я зарегистрировал все три представления с помощью диспетчера областей Prism, чтобы они загружались при запуске, и все работало так, как ожидалось.
Затем я изменил настройку так, чтобы при запуске загружались только кнопки задач. Другие виды загружались только по запросу, нажав кнопку "Задача" . Мои инициализаторы модулей выглядят следующим образом:
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. Но я не могу определить проблему.
Может ли кто-нибудь пролить свет на то, что происходит? Благодарим за помощь.