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

StackOverflow https://stackoverflow.com/questions/360378

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

На самом деле вы не активируете модуль.Вы активируете просмотр в определенном регионе.Прочтите это Статья.

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

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

Другие советы

Вы можете удалить представление, вызвав метод Regions Remove.

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); 
    }

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top