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

UNO中NavigateViewModelAsync<>无法通过NavigationEventArgs传递数据

UNO Navigation 主-详情页参数传递问题解决

问题分析

你当前的代码存在两个核心问题:

  1. 键名笔误:在详情页获取参数时,判断的键是SelectedLocation,但取值时用了SelectedItem,这会导致即使参数传递成功也拿不到正确数据。
  2. 导航方法与参数接收不匹配:使用NavigateViewModelAsync<TViewModel>时,传递的data参数是直接传给目标ViewModel的,不会出现在页面OnNavigatedTo的NavigationEventArgs.Parameter中,这是你拿到null的根本原因。

解决方案

根据你的需求,提供两种可行方案:

方案一:保持ViewModel导航,在ViewModel中接收参数

修改LocationViewModel,通过构造函数或导航上下文获取参数:

// 构造函数接收参数的方式(需确保DI容器支持传递导航参数)
public LocationViewModel(IDictionary<string, object> navigationParameters)
{
    if (navigationParameters.TryGetValue("SelectedLocation", out var locObj))
    {
        SelectedLocation = locObj as FoodTruckLibrary.DataModels.Location;
    }
    if (navigationParameters.TryGetValue("LocationList", out var listObj))
    {
        // 处理LocationList逻辑
    }
}

// 或者通过INavigator获取导航参数
public LocationViewModel(INavigator navigator)
{
    var parameters = navigator.GetNavigationData<IDictionary<string, object>>();
    if (parameters != null)
    {
        if (parameters.TryGetValue("SelectedLocation", out var locObj))
        {
            SelectedLocation = locObj as FoodTruckLibrary.DataModels.Location;
        }
    }
}

同时修正详情页代码中的笔误(如果仍保留页面逻辑的话):

// 把parameters["SelectedItem"]改为parameters["SelectedLocation"]
VM.SelectedLocation = parameters["SelectedLocation"] as FoodTruckLibrary.DataModels.Location;

方案二:改用页面导航,在OnNavigatedTo中接收参数

如果更习惯在页面的OnNavigatedTo中处理参数,将主页面的导航方法改为直接导航到详情页类型:

private async Task OnEditLocation()
{
    if (this.Navigator != null && SelectedLocation != null)
    {
        var navigationParameters = new Dictionary<string, object>
        {
            {"SelectedLocation", SelectedLocation },
            {"LocationList", Locations }
        };

        // 替换为NavigateAsync,指定详情页类型
        await Navigator.NavigateAsync(typeof(LocationDetailPage), navigationParameters, CancellationToken.None);
    }
}

此时详情页的OnNavigatedTo就能正常获取e.Parameter,同时记得修正之前的键名笔误。

内容的提问来源于stack exchange,提问作者Robotuner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:27:27