Просмотр инъекций в Prism 4 и избежание зависимости - PullRequest
1 голос
/ 16 февраля 2012

В данный момент я изучаю Призму. Я создаю тестовое приложение, и мне нужно ввести вид в область по нажатию кнопки. Я знаю, как это сделать, используя этот код в view-model

IRegion region = _regionManager.Regions[RegionNames.TicketEditorRegion]; 
TicketEditorView view = _componentContainer.Resolve<TicketEditorView>();
region.Add(view);

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

Так это хороший подход, и если это так, как назвать этот RegionBuilderThing (следовать некоторому шаблону / руководству по дизайну или чему-то, чтобы другие могли его понять)? Если это не очень хороший подход, то что?

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

В идеале, вы бы добавили ViewModel в коллекцию Views в IRegion, а не в View. При условии, что у вас есть DataTemplate в загруженном ResourceDictionary (App.xaml так же хорош, как и любой другой), ViewModel будет отображаться как соответствующий View. Таким образом, вы можете полностью отделить свой код ViewModel от любого знания того, какие представления используются для его отображения на экране.

<DataTemplate DataType="{x:Type viewmodels:MyViewModel}">
    <views:MyView />
</DataTemplate>

Кроме того, я не думаю, что вам нужен RegionBuilder как таковой.

0 голосов
/ 17 февраля 2012

В стороннем модуле, содержащем ViewModel, который вы хотите внедрить, создайте класс, который подписывается на определенное событие EventAggregator (скажем, InjectChildEvent), и загрузите его в свой ComponentContainer как одиночный объект. InjectChildEvent может принимать RegionName в качестве параметра. В методе подписки разрешите ViewModel и внедрите его в область.

В главном модуле, когда нажата кнопка, опубликуйте экземпляр события InjectChildEvent EventAggregator.

Таким образом, вы избежите ссылки на другой модуль. Вам нужно будет создать событие EventAggregator в вашем проекте инфраструктуры.

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