C# MVVM轻消息通知发生多次

C# MVVM轻消息通知发生多次,c#,notifications,event-handling,mvvm-light,messagebox,C#,Notifications,Event Handling,Mvvm Light,Messagebox,我使用MVVM Light,并使用消息在ViewModels之间进行通信,以便让view.xaml.cs知道何时可以执行某些操作。我的问题是,我注册一条消息,然后它会多次接收,但第一次它只注册并接收一次。所以为了避免我的程序多次执行某些东西,我必须创建布尔标志,以查看它是否已经被接收,但它也不工作,有什么办法可以解决这个问题吗 在ViewModel.cs中 Messenger.Default.Send(new NotificationMessage("NewNameAlreadyExists")

我使用MVVM Light,并使用消息在ViewModels之间进行通信,以便让view.xaml.cs知道何时可以执行某些操作。我的问题是,我注册一条消息,然后它会多次接收,但第一次它只注册并接收一次。所以为了避免我的程序多次执行某些东西,我必须创建布尔标志,以查看它是否已经被接收,但它也不工作,有什么办法可以解决这个问题吗

在ViewModel.cs中

Messenger.Default.Send(new NotificationMessage("NewNameAlreadyExists"));
In View.xaml.cs

public View()
{    
    InitializeComponent();    
    Messenger.Default.Register<NotificationMessage>(this, NotificationMessageReceived);         
}

private void NotificationMessageReceived(NotificationMessage msg)
{           
    switch (msg.Notification)
    {
        case "NewNameAlreadyExists": 
                MessageBox.Show(Properties.Resources.CopyGipsTemplateViewModel_NewNameAlreadyExists, 
                                Title, MessageBoxButton.OK, MessageBoxImage.Exclamation);
                break;
        default:
            break;
    }
}
公共视图()
{    
初始化组件();
Messenger.Default.Register(此为NotificationMessageReceived);
}
收到私有无效NotificationMessage(NotificationMessage消息)
{           
开关(消息通知)
{
案例“NewNameReadyExists”:
MessageBox.Show(Properties.Resources.CopyGipsTemplateViewModel_NewNameAlreadyExists,
标题,MessageBoxButton.OK,MessageBoxImage.感叹号);
打破
违约:
打破
}
}

您正在视图的构造函数中注册消息。 这意味着您每次构建视图时都会获得一个新的消息注册,从而导致在第一次访问页面时它工作正常,但之后不会。 如果您在邮件注册上设置断点,您将能够确认是否存在这种情况


然后可以通过移动邮件注册、使用布尔标志包装注册或在适当的位置调用message.Default.Unregister来解决此问题。

谢谢Andy,在视图的windows\u加载事件中注册邮件就可以了。