WPF / Silverlight - связывание между несколькими XAML - PullRequest
0 голосов
/ 26 ноября 2010

.

Привет, ребята,

Рассмотрим обычный сценарий Prism (WPF / Silverlight), в котором у нас есть несколько областей, и в каждой идет представление (XAML), поэтомуможет возникнуть ситуация, когда мы взаимодействуем с одним представлением (XAML), используя мышь или клавиатуру, мы можем захотеть изменить или обновить другие представления (которые могут быть различными XAML) соответственно.Например, при выборе элемента в представлении, скажем, ItemPanelView , мы можем захотеть показать детали выбранного элемента в другом представлении, скажем, ItemDetailsView .

Итак, мой вопрос:

Было бы неплохо связать элементы из одного представления (XAML) с элементами в других представлениях ( разные XAML), чтобы реализовать такие функциональные возможности?Если я не ошибаюсь, используя этот подход, нам не нужно переходить от одного докладчика к другому (используя привязки TwoWay и т. Д.), Чтобы обновить представление в другом регионе.

Или есть какой-нибудь элегантныйвсе же простой способ сделать это?

.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2010

Есть несколько способов сделать это, не нарушая каноническую концепцию PRiSM. Как сказано в [MSDN docs] [1] (Глава 9: Связь между слабосвязанными компонентами):

При обмене данными между модулями важно, чтобы вы знали различия между подходами, чтобы вы могли лучше определить, какой подход использовать в вашем конкретном сценарии. Библиотека Prism предоставляет следующие коммуникационные подходы:

 Commanding. Use when there is an expectation of immediate action from the user interaction.
 Event aggregation. For communication across view models, presenters, or controllers when there is not a direct action-reaction expectation.
 Region context. Use this to provide contextual information between the host and views in the host's region. This approach is somewhat similar to the DataContext, but it does not rely on it.
 Shared services. Callers can call a method on the service which raises an event to the receiver of the message. Use this if none of the preceding is applicable.

В вашем случае вы должны использовать EventAggregator или RegionContext. Совместное использование ViewModel возможно, но это последнее средство.

0 голосов
/ 26 ноября 2010

Я предлагаю вам взглянуть на EventAggregator Prism (http://blogs.msdn.com/b/francischeung/archive/2008/06/02/decoupled-communication-with-prism-event-aggregation.aspx).). Каждое из ваших представлений (или, предпочтительно, моделей представлений, на которые представления могут отвечать / обновлять с помощью триггеров) может подписаться / опубликовать общее событие. Я предлагаю вместо того, чтобы просто отвечать на событие щелчка мыши или клавиатуры, чтобы вызвать это общее событие, сделать общее событие значимым (т. Е. MyItemSelected или MyItemHidden). Если вам нужна дополнительная помощь или разъяснение, дайте мне знать.

...