В этом вся прелесть Prism.
У вас есть большая гибкость, когда дело доходит до места загрузки модулей.
В прошлом я использовал IModuleManager , который я могу вставить в ViewModel любого модуля, и оттуда я могу вызвать метод загрузки.
Метод загрузки принимает строковое имя зарегистрированного вами модуля.При регистрации я также установил тип загрузки на onDemand, чтобы модуль загружался только тогда, когда я специально вызываю метод загрузки.
Так что в вашем сценарии вы можете загружать модуль B всякий раз, когда вам это нужно в модуле A.Это может быть вызвано некоторой бизнес-логикой для вашего приложения.
Чтобы ответить на ваш второй вопрос, вы можете просто передать свои параметры, используя функциональность параметров навигации службы навигации
var param = new NavigationParameters();
param.Add("trip", someObject);
await NavigationService.NavigateAsync("TripDetailsPage", param);
РЕДАКТИРОВАТЬ:
Так что, если вы хотите узнать, был ли загружен модуль или нет, вы можете сделать что-то вроде следующего:
public class ModuleService : IModuleService
{
private readonly IModuleCatalog _moduleCatalog;
private readonly IModuleManager _moduleManager;
public ModuleService(IModuleCatalog moduleCatalog, IModuleManager moduleManager)
{
_moduleCatalog = moduleCatalog;
_moduleManager = moduleManager;
}
public bool Exists(string moduleName)
{
return _moduleCatalog.Modules.Any(x => x.ModuleName == moduleName);
}
public bool Initialized(string moduleName)
{
return _moduleCatalog.Modules.Any(x => x.ModuleName == moduleName && x.State == ModuleState.Initialized);
}
public void LoadModule(string moduleName)
{
_moduleManager.LoadModule(moduleName);
}
}
Таким образом, комбинируя функциональность ModuleManager и каталога модулей, Я могу проверить, загружен ли модуль, используя модули ModuleState свойство