2011-02-02 3 views
2

En train d'essayer d'envoyer des messages à partir de mon viewmodel depuis le constructeur de viewmodel uniquement pour constater que les messages ne sont jamais distribués. ce que je fais est similaire à ce qui suit:MVVM Light Toolkit Impossible d'envoyer NotificationMessage it Constructeur ViewModel

public class MainViewModel 
{ 
    public MainViewModel() 
    { 
     PerformActionCommand = new RelayCommand(OnPerformAction); 
     RefreshTicketsCommand = new RelayCommand(OnRefreshTickets); 

     Messenger.Default.Send(new NotificationMessage("DisplayCredentials")); 
    } 
} 

La classe de réception est correctement configuré pour recevoir la notification et est comme suit:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      Closing += (s, e) => ViewModelLocator.Cleanup(); 

      Messenger.Default.Register<NotificationMessage>(this, NotificationMessageReceived); 
     } 

     private void NotificationMessageReceived(NotificationMessage msg) 
     { 
      switch (msg.Notification) 
      { 
       case "DisplayCredentials": 
        CredentialsView = new CredentialsView(); 
        var credentialsDlg = CredentialsView.ShowDialog(); 
        break; 
      } 
     } 
    } 
} 

Qu'est-ce exactement que je l'ai fait mal que la Les messages ne sont pas envoyés du constructeur?

Vive

+0

Votre message est-il envoyé avant l'appel de la méthode Register? –

Répondre

0

Le problème avec cette approche est que le constructeur ViewModel fonctionne avant que la vue Constructor, de sorte que le message est envoyé avant que l'enregistrement a lieu. Il serait approprié d'utiliser la fonctionnalité Event-to-Command de MVVMLight pour écouter l'événement Loaded de Windows. S'il vous plaît voir How to fire a Command when a window is loaded in wpf pour plus de détails.

Questions connexes