MVVM light - как получить доступ к собственности в другой модели просмотра

Я использую mvvm light для создания приложения Silverlight. Есть ли фрагмент кода, который показывает, как получить доступ к представлению модели или команде из другой модели представления или пользовательского кода управления?

Я думаю, это просто, но я как-то что-то пропустил.

Уели

Ответ 1

Вы можете использовать Messenger для этого: Отправьте пользователя в UserViewModel:

Messenger.Send<User>(userInstance);

просто отправит пользователя всем, кого это интересует.

И зарегистрируйте получателя в CardViewModel:

Messenger.Register<User>(this, delegate(User curUser){_curUser = curUser;});

или вы также можете отправить запрос с вашего CardViewModel для того, чтобы выкрикнуть пользователя:

Messenger.Send<String, UserViewModel>("Gimme user");

И реагируйте на это в UserViewModel:

Messenger.Register<String>(this, delegate(String msg)
{
if(msg == "Gimme user")
Messenger.Send<User>(userInstance);
});

(Лучше использовать перечисление, а не строку в реальном сценарии:))

Перхабы вы можете даже ответить напрямую, но я не могу проверить его на данный момент.

Просто проверьте это: Mvvm light Messenger

Ответ 2

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

RaisePropertyChanged(() => MyProperty, oldValue, newValue, true);

Затем в подписчике:

Messenger.Default.Register<PropertyChangedMessage<T>>(this, Handler);

где T - тип MyProperty.

Приветствия Laurent

Ответ 3

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

В любом случае ответственность за обработку того, кто вошел в систему, в большей степени зависит от службы, а ViewModels остаются простыми.

ViewModels должны существовать только для представления. Но, будучи хорошими гражданами, они также могут помочь другим ViewModels, например, Laurent и CodeWeasel.