Prism框架下继承AppMapViewModelBase后如何获取导航参数?
如何在Prism的CarouselPage ViewModel中获取导航参数
我来帮你搞定这个问题~既然你的ViewSpotMainViewModel继承自AppMapViewModelBase,而基类已经包含了OnNavigatedTo()和OnNavigatedFrom()方法,那获取导航参数的关键就在于利用基类的这个方法,具体可以按下面的步骤来:
1. 确认基类方法的参数类型
首先你要检查AppMapViewModelBase中的OnNavigatedTo方法是否接收INavigationParameters类型的参数——这是Prism传递导航参数的标准载体。如果基类的方法是这样定义的(通常Prism的基类ViewModel都会这么实现):
public virtual void OnNavigatedTo(INavigationParameters parameters) { // 基类的逻辑 }
2. 在子类中重写方法获取参数
既然基类的方法是虚方法,你只需要在ViewSpotMainViewModel中重写它,就能拿到导航参数了:
public class ViewSpotMainViewModel : AppMapViewModelBase, IActiveAware { public override void OnNavigatedTo(INavigationParameters parameters) { // 先调用基类的方法,保证基类逻辑正常执行 base.OnNavigatedTo(parameters); // 从参数集合中提取你需要的参数 if (parameters.ContainsKey("YourParamKey")) { // 替换成你的参数类型和键名 var targetParam = parameters.GetValue<YourParamType>("YourParamKey"); // 这里写你拿到参数后的业务逻辑 } } // 其他代码... }
3. 确认导航时的参数传递
还要确保你从PageA导航到PageB的时候,是用Prism的导航服务正确传递参数的,比如:
// 在PageA的ViewModel中 _navigationService.NavigateAsync("ViewSpotMain", new NavigationParameters { { "YourParamKey", yourActualParamValue } });
特殊注意:CarouselPage的导航
因为PageB是CarouselPage,要注意导航目标必须是这个CarouselPage本身,而不是它的子页面,否则参数会被传到子页面的ViewModel里,而不是ViewSpotMainViewModel。
如果基类的OnNavigatedTo不是虚方法,那你可以尝试让ViewSpotMainViewModel显式实现INavigationAware接口(手动写OnNavigatedTo方法),不过这种情况比较少见,通常Prism的基类ViewModel都会把导航方法设为虚方法供子类重写。
内容的提问来源于stack exchange,提问作者user1657775
相关产品推荐
相关产品推荐

