Как я могу активировать / деактивировать вид модуля после его инициализации?
Это относится к Руководству по составным приложениям для WPF или Prism.
У меня есть один "MainRegion" в моей оболочке. Мои различные модули будут загружены в этот основной регион. Я могу заполнить список доступных модулей в меню и выбрать их для загрузки. По нажатию на меню я делаю:
var module = moduleEnumerator.GetModule(moduleName);
moduleLoader.Initialize(new[] { module });
В первый раз все работает нормально, потому что методы Initialize() модулей выполняются, но после инициализации Module1, Module2 и Module3 ничего не происходит, когда я нажимаю, чтобы загрузить Module2 снова.
Мой вопрос: как я могу активировать модуль по требованию после того, как его метод инициализации был выполнен?
Спасибо за помощь!
4 ответа
Вы на самом деле не активировать модуль. Вы активируете вид в регионе. Прочитайте эту статью.
Метод Initialize вызывается только один раз для любого модуля. Я предполагаю, что тот факт, что вы видите активируемое представление в модуле при вызове LoadModule, связан с тем, что метод Initilalize регистрирует представление в регионе. Это активирует вид. Если у вас было более одного просмотра, то последним зарегистрированным будет активный.
Чтобы активировать представление, вам нужно вызвать метод Activate региона (при условии, что введены IUnityContainer и IRegionManager)...
// Get a view from the container.
var view = Container.Resolve<MyView>();
// Get the region.
var region = RegionManager.Regions["MyRegion"];
// Activate the view.
region.Activate(view);
В зависимости от типа управления регионом это либо заменит существующее представление, либо добавит к нему.
Вы можете удалить View, вызвав метод Remove Regions.
public void RemoveViewFromRegion(string viewName, string regionName, object defaultView)
{
IRegion region = regionManager.Regions[regionName];
object view = region.GetView(viewName);
region.Remove(view);
region.Activate(defaultView);
}
Означает ли это, что когда вы активируете модуль, другие модули, которые могут перекрываться им, устанавливаются в Visibility.Collapsed?
У вас должен быть ContentControl, который будет вашим регионом. Затем вам нужно будет добавить все ваши модули в этот регион. Когда вы нажимаете на меню, вы должны использовать метод Activate(...) региона, чтобы активировать конкретный модуль.