Призм модульный механизм перезагрузки - PullRequest
0 голосов
/ 23 мая 2011

Я пытаюсь реализовать модульность и у меня есть некоторые сложности.Я реализовал один модуль, который называется ModuleA, который показывает новое childWindow в своей функции инициализации;

public ModuleA()
{
   personViewModel = new PersonViewModel();
   detail = new ViewDetail(personViewModel);
}

public void Initialize()
{
   detail.Show();
}

Моя проблема в том, что я не могу снова показать представление из-за отсутствия возможности перезагрузить функцию.Мой модуль загружается по требованию, я имею в виду, что я хочу загрузить модуль, когда пользователь нажимает кнопку, поэтому у меня нет возможности загрузить модуль в начале и управлять его функциями из его собственных событий.затем я попытался показать вид из моего приложения следующим образом:

private void ButtonModelA_Click(object sender, RoutedEventArgs e)
{
   this.moduleManager.LoadModule(MyBootstrapper.ModuleAName);
   ChildWindow detail = new ModuleA.ViewDetail(new ModuleA.ViewModel.PersonViewModel());
   detail.Show();
}

таким образом, загрузка модуля стала ненужной.

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

1 Ответ

0 голосов
/ 23 мая 2011

Я не совсем уверен, как это работает в Silverlight, но я думаю, что есть неправильное понимание Prism.

Призма основана на регионах. Это означает, что пользовательский интерфейс приложений состоит из ContentControls (или других элементов управления, способных к региону), которые представляют собой регион. Менеджер региона теперь добавляет все представления, которые хотят находиться внутри определенного региона, именно в этот регион.

Модули просто должны сообщить менеджеру региона, в каком регионе хотят находиться представления, реализованные в конкретном модуле:

RegionManager.RegisterViewWithRegion( "RegionName", typeof( View ) );

Если конкретный регион в настоящее время не является частью пользовательского интерфейса, поскольку представление, содержащее элемент управления, в котором расположен регион, не является частью самого пользовательского интерфейса, представление, которое хочет находиться внутри региона, не может быть размещено внутри этого региона. Региональный менеджер просто не знает региона. Чтобы отобразилось представление, необходимо вручную добавить элемент управления, в котором размещается регион, в пользовательский интерфейс.

Другим способом является добавление конкретного региона вручную. Используя этот подход, вам не нужно регистрировать представление для регионального менеджера. Поэтому, когда региональный менеджер обнаруживает регион, он остается пустым. Теперь вы можете добавить представление вручную в регион, используя менеджер региона:

IRegion region = RegionManager.Regions["RegionName"];
region.Add( new View(), "ViewName" );

Если вы хотите поместить представления в регион в зависимости от состояния или действия пользователя, вы должны добавить его в регион вручную. Взгляните на Справочник трейдера. В ней очень просто объясняется, как добавлять представления в регионы, инициируемые действием пользователя.

...