未收到 MVVMLight Messenger 消息

MVVMLight Messenger message not being received

我有一个主视图模型,它包含 WPF 应用程序的主要 window,并根据当前视图模型对象切换框架中的视图。要在视图模型之间切换,我有一个 List 个非主视图模型。

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];

第一个 "current" viewmodel 对象是您第一次启动程序时加载的对象。我通过 FirstViewModel 发送消息并由 SecondViewModel 接收。问题是,直到我至少更改一次 SecondViewModel,它才收到消息。

问题似乎很明显 SecondViewModel 尚未实例化以接收消息,但我不确定这到底是怎么回事。

奖金信息和问题... 每次我更改 views/viewmodels,它都会生成另一个页面...

<Frame x:Name="DisplayAreaFrame" Content="{Binding CurrentPageViewModel}" />

这是 MainWindow.xaml 中视图被更改的地方。虽然它似乎并没有直接更改。相反,它添加了一个...页面(?),您可以从中来回翻页。 这些按钮只会在您加载到第二个或第三个视图模型后出现。

无论如何,我现在没有想法,所以任何想法都可能是有用的灵感!提前致谢。

编辑: 在SecondViewModel注册下方添加

SecondViewModel 在构造函数中注册

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

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

虽然没有正式的帮助,但还是要感谢SO社区的间接帮助! :D