MVVM-Light:我们应该把Messenger寄存器放在哪里

时间:2012-12-10 10:40:08

标签: mvvm mvvm-light mvvm-toolkit

关于使用mvvmlight v4的messenger,我有一个问题: 我们应该把Messenger寄存器放在哪里? 我找到了一些例子,他们把它们放在了构造函数中。但是我遇到了一个问题,无论何时我们创建一个视图实例,这条消息都会再次注册 - >消息处理程序将被调用为相同数量的已注册消息。

如:我注册了一条消息:

Messenger.Default.Register<NotificationMessage>(this, (nm) =>
    {
        if (nm.Sender == this.DataContext)
        {
           if (nm.Notification == "OnNext")
           {
               this.Hide();
               Form2 f2= new Form2();
               f2.Show();
           }
        }
    }

- &GT;每次,第一次用户clik接下来,出现1个表单,但是当用户再次单击Next时,这次,2个消息被注册&amp;制作2个表格。 我怎么处理这个案子?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

public class MainWindow : ICleanup
{
    public MainWindow()
    {
        InitializeComponent();

        Messenger.Default.Register(recipient, action);
    }

    public void Cleanup()
    {
        Messenger.Default.Unregister(recipient, action);
    }
}