未收到MVVMLight Messenger消息

时间:2017-01-19 23:04:55

标签: c# wpf mvvm mvvm-light

我有一个主视图模型,它包含WPF应用程序的主窗口,并根据当前的viewmodel对象切换框架中的视图。要在视图模型之间切换,我有一个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];

第一个“当前”viewmodel对象是第一次启动程序时加载的对象。我通过FirstViewModel发送消息并由SecondViewModel收到。问题是,直到我至少改为SecondViewModel,它才会收到消息。

似乎很明显问题是SecondViewModel尚未实例化但尚未收到消息,但我不确定它在世界上是怎么回事。

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

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

这是MainWindow.xaml视图被更改的地方..虽然看起来并没有直接改变。相反,它添加了一个可以来回翻转的页面(?)。 Navigation Buttons只有在第二个或第三个视图模型中加载后,才会显示这些按钮。

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

修改 在SecondViewModel注册

下面添加

在contructor中注册的SecondViewModel

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

1 个答案:

答案 0 :(得分:0)

进一步挖掘后,SecondViewModel被实例化为TWICE。这让我意识到我的原始ViewModelLocator正在上面的代码之外创建一个新实例。将ViewModelLocator更改为指向MainViewModel的实例。 :)

虽然没有人正式帮助,但我要感谢SO社区间接帮助! :d