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



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

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

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

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

提前感谢您的任何帮助。

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

public class MainWindow : ICleanup
{
    public MainWindow()
    {
        InitializeComponent();
        Messenger.Default.Register(recipient, action);
    }
    public void Cleanup()
    {
        Messenger.Default.Unregister(recipient, action);
    }
}

相关内容

  • 没有找到相关文章

最新更新