未收到 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
我有一个主视图模型,它包含 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