2016-11-09 2 views
0

Dans un MainViewModel j'envoie un message:L'un des MVVM ViewModels ne reçoit pas les messages

private void TextBoxKeyDownVMMethod(KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     MessengerInstance.Send<Messages.WebTab.NavigatingToPageArgs>(new NavigatingToPageArgs { UrlForNavigating = "http://stackoverflow.com/questions/11485897/viewmodel-doesnt-receive-message-in-mvvm-light" }); 
     //GoToPageInSelectedTabVMCommand.Execute((object)null); 
     Keyboard.ClearFocus(); 
    } 
} 

En autre je reçois il:

public WebTabItemVievModel() 
{  
    MessengerInstance.Register<NotificationMessage<Messages.WebTab.NavigatingToPageArgs>>(this, _MessageHandler_NavigatingToPage); 
} 

private void _MessageHandler_NavigatingToPage(NotificationMessage<NavigatingToPageArgs> args) 
{ 
    GoToPageCommand.Execute(args.Content.UrlForNavigating); 
} 

WebTabItemVievModel est créé comme ObservableCollection dans le constructeur de MainViewModel, cette collection est ItemsSource pour le contrôle onglet

public MainViewModel() 
     {    
      WebTabItems = new ObservableCollection<WebTabItemVievModel>();    
      WebTabItemVievModel tabItem; 
      tabItem = ServiceLocator.Current.GetInstance<WebTabItemVievModel>(); 
      tabItem.Header = "Empty tab"; 
      WebTabItems.Add(tabItem); 
      tabItem = new WebTabItemVievModel { Header = "Empty tab" }; 
      WebTabItems.Add(tabItem); 
      tabItem = new WebTabItemVievModel { Header = "Empty tab" }; 
      WebTabItems.Add(tabItem);   
      tabItem = new WebTabItemVievModel() { AddNewTabOnTabHeaderClick =true}; 
      WebTabItems.Add(tabItem); 
} 

WebTabItemVievModel a sa propre UserControl pour la visualisation, Wich est binded par définition des ressources en MainWindow.xaml:

<Window.Resources> 
    <DataTemplate DataType="{x:Type vm:WebTabItemVievModel}" > 
     <v:WebTabItemContentViev></v:WebTabItemContentViev> 
    </DataTemplate> 
</Window.Resources> 

Locator a déjà vrai paramètre lors de l'enregistrement. Il n'a rien changé:

SimpleIoc.Default.Register<WebTabItemVievModel>(true); 
    SimpleIoc.Default.Register<MainViewModel>(true); 

Qui a des idées pourquoi WebTabItemVievModels ne reçoivent pas les messages?

+0

Pourquoi traitez-vous les frappes en une VM? – slugster

+0

il est juste testé triger qui fonctionne, le message a été définitivement envoyé. –

Répondre

0

Tout enregistrement du type est

NotificationMessage

Mais tout en envoyant le type est Messages.WebTab.NavigatingToPageArgs

Faire Les mêmes types et il devrait fonctionner

+0

Merci, j'ai essayé ceci: MessengerInstance.Send (nouveau NotificationMessage (nouveau Messages.WebTab.NavigatingToPageArgs {UrlForNavigating = "http://stackoverflow.com/questions/11485897/viewmodel-doesnt-receive -message-in-mvvm-light "}," bla bla ")); et cela fonctionne) –