我有一个主视图模型,它包含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
视图被更改的地方..虽然看起来并没有直接改变。相反,它添加了一个可以来回翻转的页面(?)。 只有在第二个或第三个视图模型中加载后,才会显示这些按钮。
无论如何,我现在已经完全没有想法,所以任何想法都可能是有用的灵感!提前谢谢。
修改 在SecondViewModel注册
下面添加在contructor中注册的SecondViewModel
Messenger.Default.Register<String>(this, id => {handleSelectedMessage(id);});
答案 0 :(得分:0)
进一步挖掘后,SecondViewModel
被实例化为TWICE。这让我意识到我的原始ViewModelLocator
正在上面的代码之外创建一个新实例。将ViewModelLocator
更改为指向MainViewModel
的实例。 :)
虽然没有人正式帮助,但我要感谢SO社区间接帮助! :d