Mvvm 灯光信使

Mvvm 灯光信使,mvvm,mvvm-light,mvvm-toolkit,Mvvm,Mvvm Light,Mvvm Toolkit,我是MVVM Light的新手,我正在尝试学习和实现Messenger类。我已经阅读了许多其他messenger教程和帖子,但仍然无法使其正常工作。下面是我写的一些代码来帮助我学习。根据我的研究,我认为我已经正确地实现了一切,但它不起作用。有人知道我做错了什么吗 public class MainViewModel : ViewModelBase { public MainViewModel() { } private RelayCommand _sendMessage;

我是MVVM Light的新手,我正在尝试学习和实现Messenger类。我已经阅读了许多其他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; }
}
public类MainViewModel:ViewModelBase
{
public MainViewModel(){}
专用中继命令发送消息;
公共中继命令发送消息
{
得到
{
返回发送消息
??(_sendMessage=新继电器命令(
() =>
{
var pInfo=newpersonalinfo{Name=“Some Name”,Age=31};
Messenger.Default.Send(pInfo);
}));
}
}
} 
公共类消息接收器
{
公共消息接收者()
{          
Messenger.Default.Register(此,
动作=>
{
Debug.WriteLine(action.Age);
Debug.WriteLine(action.Name);
}
);
}    
}
公共类个人信息
{
公共字符串名称{get;set;}
公共整数{get;set;}
}

您如何确保消息接收器已实例化?您可能希望在发送视图模型中创建一个实例—只是为了学习

*通常,视图模型使用messenger“相互对话”。因此,学习它的最佳方法是使用两个具有独立视图模型的控件

如果让消息接收器扩展baseviewmodel并在应用程序中将新控件绑定到它,可能会使事情变得更加明显。*

尝试以下方法:

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) {
    }
}
public类MainViewModel:ViewModelBase
{
MessageReceiver mr=新MessageReceiver();
public MainViewModel(){}
专用中继命令发送消息;
公共中继命令发送消息{
得到{
返回发送消息
??(_sendMessage=新继电器命令(
() =>
{
var pInfo=newpersonalinfomessage(newpersonalinfo{Name=“Some Name”,Age=31});
Messenger.Default.Send(pInfo);
}));
}
}
}
公共类消息接收器
{
公共消息接收者(){
Messenger.Default.Register(此,
动作=>
{
Debug.WriteLine(action.Content.Age);
Debug.WriteLine(action.Content.Name);
}
);
}
}
公共类个人信息
{
公共字符串名称{get;set;}
公共整数{get;set;}
}
公共类PersonalInfoMessage:GenericMessage
{
公共PersonalInfo消息(PersonalInfo内容)
:基本(内容){
}
}

这只是惯例。主要问题是MessageReceiver类没有实例化。