MVVM Light消息通知多次发生

时间:2016-02-25 04:47:08

标签: c# notifications event-handling mvvm-light messagebox

我正在使用MVVM Light并使用Message在ViewModels之间进行通信,让view.xaml.cs知道何时可以执行某些操作。我的问题是我注册了一条消息,然后它多次接收它,但第一次它只注册和接收一次。因此,为了防止我的程序多次执行某些操作,我必须创建布尔标志以查看它是否已被接收但是它也无法正常工作,是否有任何想法可以解决这个问题。

在ViewModel.cs

Messenger.Default.Send(new NotificationMessage("NewNameAlreadyExists"));

在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;
    }
}

1 个答案:

答案 0 :(得分:0)

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

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