Отправьте сообщение неструктурированному классу в Silverlight с помощью MVVM Light - PullRequest
1 голос
/ 02 марта 2011

Эй, ребята, я строю проект с использованием Silverlight и шаблона MVVM, мне нужно перейти на страницу с моделью представления в виде DataContext LayoutRoot, мне нужно передать объект этомупросмотреть модель для редактирования, но так как она еще не построена, я не смогу использовать класс MVVM Light Messenger, потому что для отправки сообщения сначала необходимо зарегистрировать указанный тип.

Так можно ли отправить сообщение до того, как будет создан класс модели представления, и когда он будет создан, я смогу получить сообщение?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2011

Я сам не пробовал, но этот парень , похоже, имеет довольно хорошее решение этой распространенной проблемы.Вы можете просмотреть его источник (не загружая весь проект contrib) здесь , посмотрев в папке WP7Contrib.Messaging единственный файл cs, который его реализует.Проект в целом предназначен для мобильных приложений (в частности, WP7), но эта пользовательская реализация Messenger действительно не зависит от этого.

По сути, он делает специальную реализацию Messenger, которая «ретвитит» последнее сообщение дляданный тип подписи каждый раз, когда кто-то новый регистрируется, чтобы их прослушать.Таким образом, первая виртуальная машина может отправить свое сообщение, вторая виртуальная машина будет создана (возможно, вашим IoC-контейнером или чем-то еще) и зарегистрируется для прослушивания и немедленно получит сообщение, которое было отправлено до того, как оно появилось.

КонечноЭто может иметь некоторые проблемы с условиями гонки.Он полагается на то, что никакие другие сообщения не отправляются для данной подписи, пока предполагаемый получатель не получит возможность получить его.На практике, однако, я думаю, что это не слишком большая проблема.Особенно, если вы правильно используете целевую и отправляющую части сообщений.

0 голосов
/ 15 марта 2011

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

Установка точек останова

Set breakpoints

Set breakpoint at MainViewModel()

Set breakpoint at Sub3View()

MainViewModel () обращен первым.

MainVieModel() is hit first

Sub3ViewModel () обращен, слушатель зарегистрирован.

Sub3ViewModel() is hit, listener registered

RootVisual установлен.

RootVisual is set

...