Как я могу активировать / деактивировать вид модуля после его инициализации?

Это относится к Руководству по составным приложениям для 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(...) региона, чтобы активировать конкретный модуль.

Другие вопросы по тегам