Как получить сообщение, отправленное с помощью MVVM Light IMessenger, между 2 виртуальными машинами - PullRequest
2 голосов
/ 04 мая 2011

У меня есть 2 ViewModels, и оба используют интерфейс ViewModelBase из MVVM Light

У меня есть одно представление (которое представляет собой вкладку, созданную в другом рассматриваемом представлении), которое обрабатывает вход в систему и сохраняет его в этом элементе

private int loginRights;

Затем я хочу, чтобы этот var отправлялся полученным в другом представлении, чтобы он мог создавать вкладки в зависимости от уровня userRights.(Это не приложение serius, а просто проект для обучения использованию MVVM, поэтому безопасность НЕ является проблемой). Итак, у меня есть это, чтобы отправить его

loginRights = -1;
MessengerInstance.Send(loginRights);

Но тогда я сомневаюсь, что я долженчтобы написать в получающей ViewModel, также возможно ли заставить получающий класс выполнить что-то, как только отправляющая ViewModels отправит новые данные?

У меня есть это

MessengerInstance.Register<int>(this, success);
private void success(int rights)
{
    Console.WriteLine(rights);
}

Но это неработает на всех, но довольно сложно найти приличных гидов

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Не знаю, почему это не работает для вас, но использование int в качестве типа сообщения является очень плохой идеей ... Что если вам нужно отправить значение int, которое имеетсовершенно другой смысл, не связанный с правами входа?Все ViewModels, которые зарегистрировались для int, также получат его, и они не будут знать, что это значит.

Вы должны создать специальные классы для своих сообщений, чтобы каждый вид сообщения был четко идентифицирован.


РЕДАКТИРОВАТЬ: я посмотрел на ваш код, очевидно, вы явно создаете экземпляр Messenger в конструкторе.Если вы сделаете то же самое в других ViewModel, они будут использовать разные экземпляры мессенджера, поэтому они не смогут обмениваться сообщениями. Вы должны использовать один и тот же экземпляр мессенджера в обеих ViewModels .Вместо явного создания экземпляра мессенджера, попробуйте использовать Messenger.Default, и он должен работать нормально.

0 голосов
/ 04 мая 2011

Я не знаю, mvvm-light messenger, но я предлагаю вам зарегистрироваться после отправки вашего сообщения.

сценарий должен работать, если у вас есть экземпляр входа в систему и другой экземпляр vm, и если вы первыйзарегистрируйтесь и второй отправьте сообщение.

возможно, вы можете дать еще немного информации.

РЕДАКТИРОВАТЬ: см. Ответ Томаса Левеска, вы, конечно же, должны использовать тот же экземпляр посланника.Синглтон или другое.

...