PowerApps中如何检测集合值变更以限制未保存导航?
针对你用MyDataCollection填充的可编辑画廊,以下几个方案比全量复制对比更高效:
增量标记法
给MyDataCollection中的每个数据项添加一个isDirty布尔字段,初始化时设为false。用户编辑任何一项时,立即将该项的isDirty设为true。检测变更时只需遍历集合,检查是否存在isDirty为true的项即可,时间复杂度为O(n),且无需全量对比数据内容。保存操作完成后,将所有项的isDirty重置为false。变更日志记录
维护一个独立的changes集合(对象或数组),每次用户编辑数据项时,记录该项目的唯一标识(如ID)和变更内容(或仅记录标识)。检测变更时只需判断changes是否为空即可,完全避免遍历原集合。保存成功后清空changes集合。哈希值对比法
初始化时,将MyDataCollection序列化为字符串(如JSON.stringify),并生成一个轻量哈希值(如CRC32、MD5或自定义简单哈希)缓存起来。每次编辑操作完成后,重新序列化当前集合并生成新哈希,与原始哈希对比即可判断是否有变更。这种方式的计算量远小于全量逐字段对比,适合中等规模集合。
注意:若集合元素顺序不影响业务逻辑,序列化前可先按唯一标识排序,避免因元素顺序变动误判为变更;若存在不可序列化的对象,需先转换为可序列化格式。编辑事件监听法
在画廊的所有可编辑组件(输入框、下拉选等)上绑定change事件,一旦触发编辑操作,直接设置一个全局的hasUnsavedChanges标志为true。保存后将标志重置为false。此方法实现最简单,性能最优,但可能存在假阳性(比如用户编辑后又改回原值),若业务可接受这种小概率情况,这是首选方案。
内容的提问来源于stack exchange,提问作者Sumit

