Просмотр не отображается в регионе - PullRequest
1 голос
/ 06 августа 2011

У меня есть два вопроса по поводу сценария ниже: Почему регион изначально не был добавлен в коллекцию регионов?

Почему представление не отображается в регионе ... или как я могу устранить неполадкиэто?

Вот проблема: в Prism для WPF у меня есть окно, которое работает как всплывающее окно.Это окно имеет пользовательский элемент управления, который использует атрибут региона.По какой-то причине регион этого окна не появился в коллекции регионов.

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

IRegion region = new SingleActiveRegion();
myRegionManager.Regions.Add("MainWindowRegion", region);
myContainer.Resolve<someViewModel>().Initialize();
SomeView someView = myContainer.Resolve<SomeView>();
SomeViewModel someViewModel = myContainer.Resolve<SomeViewModel>();
someView.DataContext = someViewModel;
myRegionManager.Regions["MainWindowRegion"].add(someView, "SomeView");

Регион теперь появляется в коллекции регионов вместе со всеми другими моими регионами.Однако someView никогда не отображается в регионе.

1 Ответ

0 голосов
/ 11 августа 2011

Первый:

Где вы добавляете свои виды и модели просмотра в Unity? Вы должны делать это как часть инициализации вашего модуля. Каждый из ваших модулей Prism должен иметь один класс, который реализует IModule.

Предполагая, что вы сделали это:

Читая код выше, я вижу, что создается регион, но вы не добавили Xaml для элемента управления, который будет привязан к этому региону.

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

<UserControl>
<Grid>
<ItemsControl Margin="0,20,0,0" cal:RegionManager.RegionName="MainWindowRegion" />
</Grid>
</UserControl>

Это создаст MainWindowRegion и свяжет его с ItemsControl на странице. Когда этот пользовательский элемент управления был загружен, его регион был бы зарегистрирован в Prism и добавлен к значению по умолчанию RegionManager.

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

Глядя на разрешение view/viewmodel, есть более простой способ:

Пусть SomeView примет параметр SomeViewModel в своем конструкторе, а затем привяжет его к DataContext. Unity увидит, что SomeView имеет зависимость, и автоматически разрешит ее ...

...