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

Xamarin.Forms使用Shell导航时如何传递完整自定义模型对象

Xamarin.Forms Shell导航传递完整模型对象解决方案

方案1:使用官方原生传参(推荐,适用于Xamarin.Forms 4.7及以上版本)

Shell的GoToAsync原生支持强类型对象传递,无需序列化转字符串,是最优实现方案:

  • 第一步:修改导航代码,传入带对象的参数字典
// 替换yourModelInstance为你要传递的实际模型对象
await Shell.Current.GoToAsync("TesProject.Views.DetailView", new Dictionary<string, object>
{
    { "PassedModel", yourModelInstance }
});
  • 第二步:在详情页对应的ViewModel上添加QueryProperty特性接收参数
// 第一个参数是ViewModel内接收的属性名,第二个参数和传参时的key保持一致
[QueryProperty(nameof(DetailModel), "PassedModel")]
public class DetailViewModel : INotifyPropertyChanged
{
    private YourModelType _detailModel;
    // 你的模型类型属性,导航完成后会自动赋值为传递的对象
    public YourModelType DetailModel
    {
        get => _detailModel;
        set
        {
            _detailModel = value;
            OnPropertyChanged();
            // 可在这里触发拿到对象后的后续逻辑
        }
    }

    // 省略INotifyPropertyChanged的基础实现代码
}

方案2:序列化传参(适用于低版本Xamarin.Forms)

如果你的项目Xamarin.Forms版本低于4.7,不支持原生对象传递,可以通过JSON序列化的方式实现:

  • 第一步:导航前序列化模型为字符串,作为查询参数传递
using System.Text.Json;
// 序列化模型
var modelJson = JsonSerializer.Serialize(yourModelInstance);
// 对JSON字符串做URI转义,避免特殊字符导致路由解析错误
var escapedJson = Uri.EscapeDataString(modelJson);
// 拼接参数导航
await Shell.Current.GoToAsync($"TesProject.Views.DetailView?modelJson={escapedJson}");
  • 第二步:接收参数后反序列化为模型对象
[QueryProperty(nameof(ModelJson), "modelJson")]
public class DetailViewModel : INotifyPropertyChanged
{
    private string _modelJson;
    public string ModelJson
    {
        get => _modelJson;
        set
        {
            _modelJson = Uri.UnescapeDataString(value);
            // 反序列化得到完整模型对象
            DetailModel = JsonSerializer.Deserialize<YourModelType>(_modelJson);
        }
    }

    public YourModelType DetailModel { get; set; }
}

注意事项

  • 路由注册的字符串要和导航时传入的路由完全一致,避免大小写、拼写错误导致路由匹配失败
  • 若你没有使用MVVM架构,也可以在DetailView的OnNavigatedTo生命周期方法中手动获取参数赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:06:02