MVVM指示灯:我们应该将Messenger的注册表放在哪里

MVVM指示灯:我们应该将Messenger的注册表放在哪里,mvvm,mvvm-light,mvvm-toolkit,Mvvm,Mvvm Light,Mvvm Toolkit,关于使用mvvmlight v4的messenger,我有一个问题: 我们应该把信使号的登记簿放在哪里? 我找了一些例子,他们把它们放在我的视野中。但我遇到了一个问题,每当我们创建视图实例时,都会再次注册此消息-->消息处理程序将作为相同数量的已注册消息调用 例如:我注册了一条消息,如: Messenger.Default.Register<NotificationMessage>(this, (nm) => { if (nm.Sender == thi

关于使用mvvmlight v4的messenger,我有一个问题: 我们应该把信使号的登记簿放在哪里? 我找了一些例子,他们把它们放在我的视野中。但我遇到了一个问题,每当我们创建视图实例时,都会再次注册此消息-->消息处理程序将作为相同数量的已注册消息调用

例如:我注册了一条消息,如:

Messenger.Default.Register<NotificationMessage>(this, (nm) =>
    {
        if (nm.Sender == this.DataContext)
        {
           if (nm.Notification == "OnNext")
           {
               this.Hide();
               Form2 f2= new Form2();
               f2.Show();
           }
        }
    }
Messenger.Default.Register(此,(nm)=>
{
if(nm.Sender==this.DataContext)
{
如果(nm.Notification==“OnNext”)
{
this.Hide();
Form2 f2=新的Form2();
f2.Show();
}
}
}
-->每次,第一次用户点击下一步时,会出现1个表单,但当用户再次单击下一步时,这一次会注册2条消息并显示2个表单。 我怎么处理这个案子


提前感谢您的帮助。

视图的构造函数似乎是放置Messenger注册表的好地方。您可以在
Cleanup()
函数中放置unregister(您必须实现
ICleanup
接口)

public类主窗口:ICleanup
{
公共主窗口()
{
初始化组件();
Messenger.Default.Register(收件人,操作);
}
公共空间清理()
{
Messenger.Default.Unregister(收件人,操作);
}
}

幸运的是,我找到了解决此问题的方法:即在注册之前先注销邮件。例如:Messenger.Default.unregister(this);。无论如何,我仍在等待您的评论,以确保我的操作正确。您好,我确实在视图的解构器中注销了邮件,看起来不太好&我遇到了麻烦().谢谢你的回复!