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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:10:26