C# 未收到MVVMLight Messenger消息
我有一个主viewmodel,它保存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
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一次(而不是之前)后接收消息。