Как я могу активировать / деактивировать вид модуля после его инициализации? - PullRequest
3 голосов
/ 11 декабря 2008

Это относится к руководству по составным приложениям для WPF или Prism.

У меня есть один "MainRegion" в моей оболочке. Мои различные модули будут загружены в этот основной регион. Я могу заполнить список доступных модулей в меню и выбрать их для загрузки. По нажатию на меню я делаю:

var module = moduleEnumerator.GetModule(moduleName);
moduleLoader.Initialize(new[] { module });

В первый раз все работает нормально, потому что методы Initialize () модулей выполняются, но после инициализации Module1, Module2 и Module3 ничего не происходит, когда я нажимаю для загрузки Module2 снова.

Мой вопрос: как активировать модуль по требованию после того, как был выполнен его метод инициализации?

Спасибо за вашу помощь!

Ответы [ 4 ]

4 голосов
/ 22 мая 2009

Вы фактически не активируете модуль. Вы активируете вид в регионе. Прочитайте эту статью .

Метод 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);

В зависимости от типа элемента управления региона это либо заменит существующее представление, либо добавит к нему.

2 голосов
/ 11 августа 2010

Вы можете удалить 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); 
    }
0 голосов
/ 06 февраля 2010

Означает ли это, что когда вы активируете модуль, другие модули, которые могут перекрываться им, устанавливаются в Visibility.Collapsed?

0 голосов
/ 15 декабря 2008

У вас должен быть ContentControl, который будет вашим регионом. Затем вам нужно будет добавить все ваши модули в этот регион. Когда вы нажимаете на меню, вы должны использовать метод Activate (...) региона для активации определенного модуля.

...