如何通过ListView底部按钮提交复选框选中值?
解决ListView选中项提交并创建AssessmentModel的问题
核心思路:不要直接遍历ListView的UI元素,而是直接操作绑定的数据源SymptomList——因为CheckBox的选中状态已经通过双向绑定同步到数据源的IsChecked属性中了。
步骤1:确保症状模型支持双向绑定
你的SymptomModel需要实现INotifyPropertyChanged接口,保证UI的选中状态能同步回模型对象:
public class SymptomModel : INotifyPropertyChanged { private bool _isChecked; public bool IsChecked { get => _isChecked; set { _isChecked = value; OnPropertyChanged(nameof(IsChecked)); } } public string SymptomName { get; set; } public int Severity { get; set; } // 对应示例中的严重程度字段,按需调整 public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
步骤2:在提交事件中处理选中项
在页面后台的SubmitClick方法中,直接从绑定的数据源筛选选中项,创建对应的AssessmentModel:
protected void SubmitClick(object sender, EventArgs e) { // 获取ViewModel中的症状列表(替换YourViewModelType为你实际的ViewModel类名) var viewModel = (YourViewModelType)this.BindingContext; var selectedSymptoms = viewModel.SymptomList.Where(s => s.IsChecked).ToList(); // 遍历选中项生成AssessmentModel foreach (var symptom in selectedSymptoms) { var assessment = new AssessmentModel( UserID, // 替换为实际用户ID symptom.SymptomName, symptom.IsChecked, symptom.Severity // 若需用户输入严重程度,需在ItemTemplate中添加控件绑定该属性 ); // 此处可添加保存、上传等逻辑 } this.Navigation.PopAsync(); }
补充说明
- 如果
SymptomList是直接在页面后台定义的(而非ViewModel),直接使用该集合即可,无需获取BindingContext。 - 若严重程度需要用户输入,需在ListView的ItemTemplate中添加输入控件(如Slider、Entry),并绑定到
SymptomModel的Severity属性,确保值能同步回模型。
内容的提问来源于stack exchange,提问作者JordanChester
相关产品推荐
相关产品推荐

