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

Xamarin Forms点击ListView内按钮转换SelectedItem报InvalidCastException错误

错误原因

  1. 按钮点击事件的sender参数是触发事件的控件本身,也就是你点击的Load按钮,你直接将其强制转换为ListView属于类型不匹配,直接触发InvalidCastException异常。
  2. 退一步讲,就算你能拿到ListView实例,点击列表内的按钮也不会自动将当前行设置为SelectedItem,SelectedItem仅在触发ItemTapped行点击事件时才会更新,因此就算类型转换成功,你大概率也拿不到点击行对应的数据。

解决方法

直接取点击按钮的BindingContext即可,每个列表项的BindingContext默认就是当前行绑定的SavedVira实例,无需依赖SelectedItem。

修改后的按钮点击事件代码

private void LoadButton_Clicked(object sender, EventArgs e)
{
    // 先把sender转为触发点击的Button实例
    var clickedButton = sender as Button;
    // 取Button的BindingContext就是当前行对应的SavedVira对象
    var LoadVirus = clickedButton?.BindingContext as SavedVira;
    if (LoadVirus == null)
        return;
    Values.LoadBool = true;
    Values.symptomZero = LoadVirus.symptom1;
    Values.symptomOne = LoadVirus.symptom2;
    Values.symptomTwo = LoadVirus.symptom3;
    Values.symptomThree = LoadVirus.symptom4;
    Values.symptomFour = LoadVirus.symptom5;
    Values.symptomFive = LoadVirus.symptom6;
}

可选优化

你Init方法里的BindingContext = new SavedVira();是多余代码,你已经给ListView指定了ItemsSource为SavedVira集合,这行代码不影响运行但可以直接删除。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:45:10