【问题标题】:MVVM Light MessengerMVVM 光信使
【发布时间】:2014-09-25 20:57:36
【问题描述】:

我是 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; }
}

【问题讨论】:

    标签: mvvm mvvm-light mvvm-toolkit


    【解决方案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) {
        }
    }
    

    【讨论】:

    • 这只是惯例。主要问题是 MessageReciever 类没有被实例化。
    【解决方案2】:

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

    *通常,您使用 messenger 来让视图模型“相互交谈”。所以学习它的最好方法是拥有两个具有不同视图模型的控件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多