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
相关产品推荐
相关产品推荐

