Windows Phone 7: MVVMLight и Messenger - PullRequest
       38

Windows Phone 7: MVVMLight и Messenger

2 голосов
/ 06 апреля 2011

Я пытаюсь заставить MVVMLight работать на Windows Phone 7, и у меня возникла небольшая проблема, чтобы разобраться с этой парадигмой.

Сценарий, которому я должен следовать: 1.) Когда загружается модель основного вида, через MVVM Light Messenger отправляется сообщение для проверки наличия базы данных. 2.) Сообщение получено ViewModel, и, если база данных отсутствует, сообщение отправляется обратно в View через мессенджер, чтобы показать представление установки (для перехода к нему). 3.) Представление установщика отображается первым представлением

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

1 Ответ

4 голосов
/ 07 апреля 2011

Посланник может отправлять сообщения только тем объектам, которые существуют в памяти (примечание, я рассматриваю возможность добавления какого-либо решения "автономного обмена сообщениями", но на самом деле это всего лишь видение, даже не чертеж).

В MVVM Light, способ, которым виртуальная машина подключена к представлению в XAML, виртуальная машина будет задействована очень рано (как только InitializeComponent попадет в код позади). Если вам нужно, чтобы виртуальная машина была создана ранее, вы можете сделать это в ViewModelLocator. Я собираюсь показать это на моей сессии MIX11 (Deep Dive MVVM), поэтому проверьте видео, когда оно будет опубликовано (я упомяну его в своем блоге http://blog.galasoft.ch).

Если вы не используете представление привязки MVVM Light и виртуальную машину, а виртуальная машина еще не существует в памяти, одним из способов является «кэширование» сообщения на потом. Создайте легкий объект, который существует исключительно с целью получения сообщения и его хранения. Затем, когда виртуальная машина создана, получите сообщение. это очередь сообщений, если хотите.

Я надеюсь, что это поможет, Laurent

...