You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:05:21