Xamarin Forms点击ListView内按钮转换SelectedItem报InvalidCastException错误
错误原因
- 按钮点击事件的
sender参数是触发事件的控件本身,也就是你点击的Load按钮,你直接将其强制转换为ListView属于类型不匹配,直接触发InvalidCastException异常。 - 退一步讲,就算你能拿到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
相关产品推荐
相关产品推荐

