2016-11-09 140 views
0

在一个MainViewModel:一个MVVM的ViewModels的不接收我发送消息的消息

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(); 
    } 
} 

在其它一个我收到它:

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

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

WebTabItemVievModel作为的ObservableCollection在构造函数中创建MainViewModel, 此集合是用于制表控件的ItemsSource

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都有自己的可视化用户控件,至极通过资源定义MainWindow.xaml绑定:

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

定位器已经拥有真正的参数,同时注册。它没有改变任何东西:

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

谁有任何想法为什么WebTabItemVievModels不接收消息?

+0

你为什么处理的按键一个VM? – slugster

+0

它只是测试的triger工作,消息肯定是发出。 –

回答

0

虽然注册类型是

NotificationMessage

但在发送的类型是 Messages.WebTab.NavigatingToPageArgs

使类型相同,它应该工作

+0

谢谢,我试过了: MessengerInstance.Send(new NotificationMessage (new Messages.WebTab.NavigatingToPageArgs {UrlForNavigating =“http://stackoverflow.com/questions/11485897/viewmodel-doesnt-receive -message-in-mvvm-light“},”bla bla“));它的工作原理是 ) –