获取Collection View全部IndexPath(含不可见)的C#实现需求
在C#(MVVMCross)中获取CollectionView所有IndexPath以强制加载全部单元格
我完全理解你的处境——未加载的单元格因为绑定仅在awakeFromNib时创建,导致全选按钮点击时这些单元格无法同步选中状态,只能通过强制加载所有单元格来解决。下面是对应你给出的Swift代码的C#实现,适配你的MVVMCross项目:
// 收集所有section和item对应的IndexPath var indexPaths = new List<NSIndexPath>(); for (int section = 0; section < CollectionView.NumberOfSections(); section++) { int itemCount = CollectionView.NumberOfItemsInSection(section); for (int item = 0; item < itemCount; item++) { indexPaths.Add(NSIndexPath.FromItemSection(item, section)); } } // 强制加载所有单元格 CollectionView.ReloadItems(indexPaths.ToArray());
补充说明:
- 这段代码的逻辑和你熟悉的Swift版本完全一致:遍历所有分区,再遍历每个分区下的所有条目,生成对应的
NSIndexPath集合,最后调用ReloadItems触发所有单元格的加载。 - 虽然强制加载全部单元格确实不是性能最优的方案,但在你当前的场景下是可行的临时解决办法。如果后续有优化空间,建议考虑将复选框的选中状态直接绑定到ViewModel的数据源对象上——这样即使单元格未加载,数据源的状态已经更新,等单元格被滚动加载时会自动同步选中状态,不过这需要调整现有的绑定逻辑,考虑到你项目规模较大,暂时用当前方案是合理的。
内容的提问来源于stack exchange,提问作者janavarro
相关产品推荐
相关产品推荐

