MVVM Light Messenger

Я новичок в MVVM Light и пытаюсь выучить и реализовать класс Messenger. Я прочитал много других уроков и сообщений по мессенджеру, но все еще не могу заставить его работать. Ниже приведен код, который я написал, чтобы помочь мне учиться. Из моих исследований я думаю, что все правильно реализовано, но это не работает. Кто-нибудь знает, что я делаю не так?

public class MainViewModel : ViewModelBase
{
    public MainViewModel() { }  

    private RelayCommand _sendMessage;  
    public RelayCommand SendMessage
    {
        get
        {
            return _sendMessage
                ?? (_sendMessage = new RelayCommand(
                                      () =>
                                      {
                                          var pInfo = new PersonalInfo { Name = "Some Name", Age = 31 };
                                          Messenger.Default.Send(pInfo);                                            
                                      }));
        }
    }

} 

public class MessageReciever
{
    public MessageReciever()
    {          
        Messenger.Default.Register<PersonalInfo>(this,
            action =>
            {
                Debug.WriteLine(action.Age);
                Debug.WriteLine(action.Name);
            }
            );
    }    
}

public class PersonalInfo
{
    public string Name { get; set; }
    public int Age { get; set; }
}

2 ответа

Решение

Попробуй это:

public class MainViewModel : ViewModelBase
{
    MessageReciever mr = new MessageReciever();

    public MainViewModel() { }

    private RelayCommand _sendMessage;
    public RelayCommand SendMessage {
        get {
            return _sendMessage
                ?? (_sendMessage = new RelayCommand(
                                      () =>
                                      {
                                          var pInfo = new PersonalInfoMessage(new PersonalInfo { Name = "Some Name", Age = 31 } );
                                          Messenger.Default.Send(pInfo);
                                      }));
        }
    }
}

public class MessageReciever
{
    public MessageReciever() {
        Messenger.Default.Register<PersonalInfoMessage>(this,
            action =>
            {
                Debug.WriteLine(action.Content.Age);
                Debug.WriteLine(action.Content.Name);
            }
            );
    }
}

public class PersonalInfo
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class PersonalInfoMessage : GenericMessage<PersonalInfo>
{
    public PersonalInfoMessage(PersonalInfo content)
        : base(content) {
    }
}

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

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

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

Другие вопросы по тегам