使用INavigationService而不放弃ViewModels?

问题描述:

即时通讯使用的INavigationService,所以我可以在两个视图模型这样间导航:使用INavigationService而不放弃ViewModels?

MasterViewModel:

public virtual INavigationService NavigationService { get; } 
//Command Navigate to SubUserControlView: 
NavigationService.Navigate("SubUserControlView", parentViewModel: this); 

SubViewModel:

public virtual INavigationService NavigationService { get; } 
//Command Navigate back to MainUserControlView: 
NavigationService.GoBack(parameter); 

当我回到我的MasterViewModel我所有的更改将被丢弃。我该如何避免这种情况?我想使用SubUserControlView从列表中选择一个值并将其返回到MasterViewModel

尝试主页面KeepAlive属性设置为true

<Page x:Class="WpfApplication3.MasterPage" 
     .... KeepAlive="True"> 

这可以防止Page的新实例从得到创建在每次航行时间:https://msdn.microsoft.com/en-us/library/system.windows.controls.page.keepalive(v=vs.110).aspx

这也会导致您的视图模型不会被重新创建,假设您在页面的构造函数中创建了这些模型。

+0

我假设UserControls没有这个属性? –

+0

No. Just Pages。 – mm8