sap.m.List筛选含CheckBox的CustomListItem时复选框选中状态丢失
解决sap.m.List筛选时CheckBox选中状态丢失问题
问题核心原因:你当前的CheckBox选中状态仅保存在控件实例中,当列表执行筛选操作时,列表绑定会重新渲染匹配条件的列表项,原有的CustomListItem会被销毁并重建,控件实例里的选中状态也就跟着丢失了。要彻底解决这个问题,必须把选中状态绑定到数据源的模型字段中,让状态持久化在数据层面。
修改步骤:
给数据源添加选中状态字段
确保你的每个列表数据项都包含一个布尔类型的selected字段,初始值设为false,示例如下:// 示例数据源结构 const data = [ { name: "项目1", selected: false }, { name: "项目2", selected: false }, // 其他数据项... ];修改视图中的CheckBox绑定
把CheckBox的selected属性绑定到模型的selected字段,让选中状态和数据项关联:<CustomListItem id="itemList"> <CheckBox class="sapUiTinyMarginBeginEnd" text="{name}" selected="{selected}" select="onSelectionChange"/> </CustomListItem>更新控制器的选择事件处理逻辑
在onSelectionChange事件里,同步更新对应数据项的selected字段,确保状态写入模型:onSelectionChange(event: sap.ui.base.Event) { const checkbox = event.getSource() as sap.m.CheckBox; const dataContext = checkbox.getBindingContext(); if (dataContext) { // 将选中状态同步到模型数据 dataContext.setProperty("selected", checkbox.getSelected()); } }筛选逻辑保持不变
你原来的筛选代码不需要修改,现在筛选后重建的CheckBox会自动从模型中读取selected字段的值,选中状态就不会丢失了。
如果不需要额外的事件处理逻辑,也可以直接使用双向绑定简化代码,去掉select事件:
<CheckBox class="sapUiTinyMarginBeginEnd" text="{name}" selected="{path: 'selected', mode: 'TwoWay'}"/>
内容的提问来源于stack exchange,提问作者Sanket
相关产品推荐
相关产品推荐

