PRISM RegionManager - регион в нескольких регионах

Я оказался в сложной ситуации, пытаясь решить следующий сценарий:

У меня есть два представления, каждое с 1 регионом, давайте назовем их View1.RegionA, View2.RegionB. Я регистрирую элемент управления в этих регионах, давайте назовем его Control. Control также имеет область (Control.Region), в которой я регистрирую другой элемент управления, позволяет вызвать этот SubControl

|Module_A
  -View1
  --RegionA
|Module_B
  -View2
  --RegionB
|Module_C
  -Control
  --Control.Region
  -Subcontrol

Когда я пытаюсь открыть MainView, который содержит View1 и View2, я получаю следующую ошибку:

«Регион с таким названием уже зарегистрирован: Control.Region»

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

Я также пытался выполнить привязку к свойству Control.Region.RegionName, но в этом случае мой RegionContext не был установлен и получил ту же ошибку, что и в начале.

Есть ли другое решение?


person Igor Meszaros    schedule 08.04.2016    source источник


Ответы (1)


Это происходит из-за того, что вы показываете несколько экземпляров Control.Region, и поскольку вам разрешено иметь только уникальные имена регионов, генерируется исключение. Ты на правильном пути. Чтобы решить эту проблему, вы должны использовать ограниченные регионы. Скорее всего, вы делаете что-то не так при реализации областей охвата. В вашем сообщении недостаточно информации, чтобы определить, что это такое, но я охватываю определенные области в этом курсе PluralSight, который должен помочь вам двигаться в правильном направлении:

https://app.pluralsight.com/library/courses/prism-showing-multiple-shells/table-of-contents

person Community    schedule 08.04.2016
comment
Привет, Брайан, спасибо за ответ! есть разница, которую я заметил на раннем этапе вашего курса, это то, что я использую диспетчер регионов немного иначе, используя RegisterViewWithRegion, который будет создавать экземпляр представления только тогда, когда оно отображается, и во всех примерах ScopedRegion до сих пор я должен создать экземпляр представления при добавлении его в диспетчер регионов. Есть ли способ сделать это без создания экземпляра? Потому что это причина того, что у меня это не получается. - person Igor Meszaros; 08.04.2016
comment
Честно говоря, я никогда не использовал RegisterVIewWithRegion с областями с заданной областью, в основном потому, что сначала нужно создать область с областью действия, что обычно выполняется при внедрении представления. Вы можете использовать навигацию, если хотите, чтобы вам не нужно было создавать какие-либо объекты просмотра. - person ; 08.04.2016
comment
Я только что нашел на это ответ: msdn .microsoft.com / en-us / library / ff921174 (v = pandp.40) .aspx Не следует использовать композицию обнаружения представлений, если вам нужны региональные менеджеры с определенной областью действия. - person Igor Meszaros; 08.04.2016
comment
Что вы имеете в виду, говоря, что я могу использовать навигацию? - person Igor Meszaros; 08.04.2016