Шаблон EventAggregator: Как передать данные? - PullRequest
3 голосов
/ 23 мая 2011

Я рассматриваю использование шаблона агрегатора событий в проекте пользовательского интерфейса, над которым я работаю (Silverlight / MVVM), для поддержки слабой связи между представлениями / моделями представления. Мы написали несколько экранов, используя простую систему обработки событий - на данный момент это не больше, чем подтверждение концепции, но это выглядит как очень удобное решение для создания слабосвязанной системы.

Проблема, с которой я сталкиваюсь, заключается в передаче данных из одной ViewModel в другую, когда принимающая ViewModel еще не создана. Например, если открыт экран списка клиентов, пользователь может щелкнуть определенного клиента, чтобы открыть экран редактирования / просмотра сведений о клиенте (возможно, в дочернем окне). Для работы на экране «Сведения о клиенте» требуется клиент (или идентификатор клиента).

Так что кажется разумным, что OpenCustomerDetailEvent будет содержать соответствующую информацию о клиенте, но каковы некоторые варианты внедрения этой информации в V / VM сведений о клиенте? Поскольку он еще не находится в памяти, когда обрабатывается событие, он не может напрямую прослушивать событие (сам по себе он не может быть обработчиком). Мы используем контейнер для инъекций зависимостей для создания как представления, так и модели представления (в настоящее время мы делаем «представление сначала»), поэтому использование отдельного обработчика для ввода данных через конструктор не является хорошим вариантом.

Какие есть другие варианты получения данных в представлении (модели) после его создания? Метод init, который принимает строго типизированные параметры? Используя сеттер для ввода данных? Если обработчик создаст V / VM, а затем отправит второе событие, которое VM прослушивает?

1 Ответ

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

Для этой цели я использую Prism Framework в своем приложении Silverlight.Он обеспечивает реализацию шаблона EventAggregator и навигационную инфраструктуру просмотра.

В случае призмы вы будете использовать NavigationParameters, которые предоставляют информацию для представления / модели представления, какие данные использовать и для инициализации.Если view / viewmodel еще не создан, шаблон EventAggregator бесполезен, потому что он еще не зарегистрирован на событие.

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

Лично я бы рекомендовал вам использовать платформу призмы.

...