C# 未收到MVVMLight Messenger消息

C# 未收到MVVMLight Messenger消息,c#,wpf,mvvm,mvvm-light,C#,Wpf,Mvvm,Mvvm Light,我有一个主viewmodel,它保存WPF应用程序的主窗口,并根据当前viewmodel对象在框架中切换视图。要在viewmodels之间切换,我有一个非主viewmodels的列表 private IPageViewModel currentPageViewModel; private List<IPageViewModel> pageViewModels; //Add pages PageViewModels.Add(new FirstViewModel(dataService

我有一个主viewmodel,它保存
WPF
应用程序的主窗口,并根据当前viewmodel对象在框架中切换视图。要在viewmodels之间切换,我有一个非主viewmodels的
列表

private IPageViewModel currentPageViewModel;
private List<IPageViewModel> pageViewModels;

//Add pages
PageViewModels.Add(new FirstViewModel(dataService, storageService));
PageViewModels.Add(new SecondViewModel(dataService, storageService));
PageViewModels.Add(new ThirdViewModel(dataService, storageService));

//Set initial page
CurrentPageViewModel = PageViewModels[0];
这是在
main窗口.xaml
中更改视图的地方。。但这似乎并没有直接改变。相反,它增加了。。。页面(?)可以来回翻页。这些按钮仅在加载到第二视图或第三视图模型时显示

private IPageViewModel currentPageViewModel;
private List<IPageViewModel> pageViewModels;

//Add pages
PageViewModels.Add(new FirstViewModel(dataService, storageService));
PageViewModels.Add(new SecondViewModel(dataService, storageService));
PageViewModels.Add(new ThirdViewModel(dataService, storageService));

//Set initial page
CurrentPageViewModel = PageViewModels[0];
不管怎么说,我现在还没有想法,所以任何想法都可能是有益的灵感!提前谢谢

编辑: 添加到SecondViewModel注册下面

SecondViewModel在Constructor中注册

Messenger.Default.Register<String>(this, id => {handleSelectedMessage(id);});
Messenger.Default.Register(this,id=>{handleSelectedMessage(id);});

进一步挖掘后,
SecondViewModel
被实例化两次。这让我意识到,我原来的
ViewModelLocator
在上述代码之外创建了一个新实例。将
ViewModelLocator
改为指向
MainViewModel
的实例:


虽然没有官方帮助,但我要感谢SO社区的间接帮助!:D

你订阅了构造函数中的消息了吗?@jannagy02我很抱歉。。。我不知道我有什么评论。我在构造函数中注册了一个简单的Messenger注册。这条线在上面。同样,它会在我切换到SecondViewModel一次(而不是之前)后接收消息。