【问题标题】:MVVM-Light: Where should we put the register of MessengerMVVM-Light:我们应该把 Messenger 的寄存器放在哪里
【发布时间】:2012-11-27 18:24:50
【问题描述】:

关于使用 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();
           }
        }
    }

--> 每次,用户第一次单击 Next,会出现 1 个表单,但是当用户再次单击 Next 时,这一次会注册 2 条消息并出现 2 个表单。 我该如何处理这种情况?

提前感谢您的帮助。

【问题讨论】:

  • 幸运的是,我找到了解决这个问题的方法:那就是在我注册之前取消注册消息。喜欢:Messenger.Default.Unregister(this);。无论如何,我仍在等待您的 cmets 以确保我做对了。

标签: mvvm mvvm-light mvvm-toolkit


【解决方案1】:

视图的构造函数似乎是放置Messenger的寄存器的好地方。可以把注销放在Cleanup()函数中(必须实现ICleanup接口)

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

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

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

【讨论】:

猜你喜欢
  • 2020-09-30
  • 1970-01-01
  • 2011-06-10
  • 2016-08-25
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多