Silverlight - MVVM удобный способ передачи параметра во встроенный пользовательский элемент управления? - PullRequest
0 голосов
/ 14 марта 2011

Вот сценарий:

У меня есть пользовательский элемент управления поиском заказов, который позволяет пользователю просматривать заказы и выбирать один. В пользовательский элемент управления поиском заказов встроен пользовательский элемент управления «Детали заказа», который не отображается до тех пор, пока не выбран заказ, и в этот момент он отображает детали заказа.

Вопрос в том, как передать выбранный OrderID в пользовательский элемент управления сведений о заказе и получить загружаемый заказ (т. Е. Установить свойство CurrentOrderID viewmodel для сведений о заказе и вызвать его метод LoadOrder) из пользовательского элемента управления поиском заказа, в дружественный MVVM-способ (т. е. без ссылок кода на элементы управления любого пользовательского элемента управления)

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

Мой текущий подход заключается в том, чтобы сделать свойство CurrentOrderID статическим (чтобы я мог установить его из view-модели просмотра заказа без какой-либо ссылки на активный экземпляр view-модели детали заказа) и иметь таймер с интервалом 1 с, работающим в деталях заказа. viewmodel проверяет изменения в свойстве CurrentOrderID. Однако это имеет неприятный запах и некоторые нежелательные побочные эффекты!

1 Ответ

1 голос
/ 14 марта 2011

у вас должно быть два вида с двумя моделями представления. Затем, в зависимости от используемой вами инфраструктуры MVVM (если есть), вы должны использовать механизм обмена сообщениями для обмена данными между ViewModels (шаблон Mediator).

Orders VM отправляет сообщение о том, что выбранный Order изменен (через Messenger), и OrderDetail VM получает это сообщение и реагирует соответствующим образом.

С одной стороны Messenger отвечает за подписку получателей, с другой - за отправку подписчикам. Так что нет необходимости периодически проверять что-либо, это должно быть основано на событиях.

Рассмотрите, например, использование MVVM Light и его Messenger класса:

http://mvvmlight.codeplex.com/

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