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.