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

Xamarin中如何在绑定外获取Customer数据 解决空引用报错问题

Xamarin Customer数据获取问题解决

报错原因

你在DetailProduct类中定义的Customer属性从未被赋值,默认值为null,直接访问Customer.NameUs就会触发空引用异常。你的ViewProductViewModel构造函数已经默认初始化了CustomerInfo属性,你可以直接从绑定的ViewModel中获取数据,也可以通过页面传参的方式传递已有的Customer实例。

解决方法1:直接从当前页面绑定的ViewModel中获取

将报错行的代码替换为如下内容即可:

// 先拿到绑定的ViewModel实例
var viewModel = (ViewProductViewModel)BindingContext;
// 从ViewModel中获取CustomerInfo的NameUs字段
string name = viewModel.CustomerInfo.NameUs;

解决方法2:从前置商品列表页传递Customer实例

如果你的Customer数据是在商品列表页就已经获取到的,通过构造函数传参的方式更符合业务逻辑:

  1. 修改商品列表页的跳转代码,传入Customer实例:
private async void OnViewDetailProduct(ProductInfo prod)
{
    // 这里的customer替换为你商品列表页已拿到的Customer实例
    await Navigation.PushAsync(new DetailProduct(prod, customer));
}
  1. 修改DetailProduct的构造函数,接收并处理Customer参数:
public DetailProduct(ProductInfo productInfo, Customer customer)
{
    InitializeComponent();
    NavigationPage.SetHasNavigationBar(this, true);
    var viewModel = new ViewProductViewModel();
    // 将传过来的Customer赋值给ViewModel
    viewModel.CustomerInfo = customer;
    BindingContext = viewModel;

    if (productInfo != null)
    {
        // 直接使用传过来的Customer实例
        string name = customer.NameUs;
        double countall = productInfo.AveragedID;
        viewModel.ProductInfo = productInfo;
    }    
}

补充说明

如果你只需要在XAML界面上展示NameUs字段,不需要写后台代码,直接绑定即可:

<Label Text="{Binding CustomerInfo.NameUs}" />

注意:当前ViewProductViewModel构造函数中初始化的CustomerInfo是空实例,NameUs默认值为null,如果需要填充真实业务数据,可在ViewModel中增加接口请求、本地缓存读取逻辑给CustomerInfo赋值即可。

内容的提问来源于stack exchange,提问作者Chim Di Tru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:36:03