Почему мои взгляды вводятся в мои регионы только в первый раз? - PullRequest
0 голосов
/ 13 сентября 2011

У меня есть составное WPF-приложение MEF / Prism, и у меня возникают проблемы с отображением представлений в регионах в следующем сценарии:

Приложение имеет 2 окна. Главное окно запуска с кнопкой, при нажатии на которую создается и отображается новое окно (дочернее окно). Дочернее окно имеет несколько областей. Когда приложение запускается, я использую RegionManager.RegisterViewWithRegion, чтобы зарегистрировать представления для дочернего окна.

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

Как будто RegionManager потерял свои регистрации или не может найти регионы в дочернем окне во второй раз.

Есть идеи, почему так работает?

Спасибо.

1 Ответ

1 голос
/ 14 сентября 2011

У меня была такая же проблема (Unity / Prism 4).Чтобы решить эту проблему, я удаляю активный вид из области дочернего окна и удаляю область в regionManager перед закрытием дочернего окна (кнопки OkButton и Cancel).Я не уверен, что это хорошее решение, но оно работает.(мой регион добавлен в диспетчер регионов в конструкторе дочернего окна)

Конструктор дочернего окна

this.regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
RegionManager.SetRegionManager(this.ActionContent, this.regionManager);
RegionManager.SetRegionName(this.ActionContent, REGION_NAME);
this.regionManager.Regions[REGION_NAME].Add(this.sharedViewProperty.UIElement,
this.sharedViewProperty.ViewName);
this.regionManager.Regions[REGION_NAME].Activate(this.sharedViewProperty.UIElement);

OKButton_Click

this.regionManager.Regions[REGION_NAME].Deactivate(this.sharedViewProperty.UIElement);
this.regionManager.Regions.Remove(REGION_NAME);

Теперь у меня странное поведение, когдая установил RegionManager в моем конструкторе.У меня есть исключение "Microsoft.Practices.Prism.Regions.Behaviors.RegionCreationException: исключение произошло при создании региона с именем 'ChildRegion'. Исключение было: System.ArgumentException: регион с заданным именем уже зарегистрирован:"

Когда я вставляю эту следующую строку прежде, чтобы установить менеджера региона, это работает:

this.regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();

int nbCountRegion = this.regionManager.Regions.Count();

RegionManager.SetRegionManager(this.ActionContent, this.regionManager);
RegionManager.SetRegionName(this.ActionContent, REGION_NAME);

Не говорите мне почему, я не могу это объяснить ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...