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

Xamarin Forms中Picker选中数据保存至Firebase实时库报错求助

解决Xamarin Picker选中项转字符串时的InvalidCastException问题

错误根源

你的Picker数据源是PRODUCT_REFILL模型列表,因此SelectedItem的实际类型是PRODUCT_REFILL对象,而非字符串。直接调用ToString()若未正确处理对象类型,或隐含了错误的类型转换,就会触发InvalidCastException。

具体解决方法

1. 正确获取选中对象的属性值

假设PRODUCT_REFILL模型包含你需要的属性(比如ProductType),修改按钮点击事件代码:

var selectedProduct = Picker_ProductType.SelectedItem as PRODUCT_REFILL;
if (selectedProduct != null)
{
    string orderProductType = selectedProduct.ProductType;
    // 执行保存到Firebase的逻辑
}
else
{
    // 处理未选中任何项的场景
}

用as关键字安全转换类型,同时判断null避免未选中时出错。

2. 重写模型的ToString()方法

如果希望直接通过ToString()获取目标字符串,在PRODUCT_REFILL模型中重写该方法:

public class PRODUCT_REFILL
{
    public string ProductType { get; set; }
    // 其他模型属性...

    public override string ToString()
    {
        return ProductType; // 返回你需要的字符串内容
    }
}

修改后,Picker_ProductType.SelectedItem.ToString()会直接返回ProductType的值(需确保SelectedItem不为null)。

额外验证点

  • 确认Picker的ItemDisplayBinding绑定到正确的模型属性:
    <Picker x:Name="Picker_ProductType" ItemDisplayBinding="{Binding ProductType}" />
    
  • 检查Firebase数据源获取逻辑,确保返回的是List<PRODUCT_REFILL>并正确赋值给Picker的ItemsSource:
    Picker_ProductType.ItemsSource = await GetProductRefillsFromFirebase();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:20:36