MVVM light - как получить доступ к свойству в другой модели представления - PullRequest
15 голосов
/ 23 апреля 2010

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

Полагаю, все просто, но я как-то что-то упустил.

Ули

Ответы [ 3 ]

34 голосов
/ 23 апреля 2010

Вы можете использовать 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);
});

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

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

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

4 голосов
/ 31 мая 2013

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

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

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

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

, где T - тип MyProperty.

Cheers Laurent

0 голосов
/ 22 января 2014

Еще один способ взглянуть на проблему - это иметь службу, которая возвращает «текущего пользователя, вошедшего в систему».

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

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

...