MVVM Light Messenger

时间:2014-08-03 01:37:26

标签: mvvm mvvm-light mvvm-toolkit

我是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 个答案:

答案 0 :(得分:1)

试试这个:

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) {
    }
}

答案 1 :(得分:0)

如何确保实例化消息接收者?您可能希望在发送视图模型中创建一个实例 - 仅用于学习。

*通常情况下,您使用信使视图模型来互相交谈&#39;。因此,学习它的最佳方法是使用具有单独视图模型的两个控件。

如果你让你的消息接收者扩展baseviewmodel并在你的应用程序中绑定一个新的控件可能会使它更明显发生了什么。*