Xamarin:如何向CollectionView的现有分组中添加项
问题核心原因
你的ItemGroupModel继承自ObservableCollection<ItemModel>,构造时将传入的itemModels交给基类托管,但你没有意识到ItemGroupModel实例本身就具备集合的所有操作能力,因此不需要额外存储itemModels的引用即可完成新增项操作。
实现方案
方案1:直接调用实例的集合方法(无需修改现有代码)
因为ItemGroupModel本身就是ObservableCollection<ItemModel>的子类,你可以直接对分组实例调用Add方法添加新项,UI会自动响应变更:
// 找到需要新增项的目标分组 var targetGroup = MyGroup.FirstOrDefault(g => g.Name == "GroupX"); if (targetGroup != null) { // 直接向分组添加新项 targetGroup.Add(new ItemModel { Name = "新增项名称" }); }
方案2:显式暴露子集合属性(适合需要单独管理子集合的场景)
如果你需要明确持有子集合的引用,可以修改ItemGroupModel的定义,存储传入的itemModels为公共属性:
public ItemGroupModel(String name, ObservableCollection<ItemModel> itemModels):base(itemModels) { this.Name = name; // 存储子集合引用 this.Items = itemModels; } public String Name { get; set; } // 新增公共子集合属性 public ObservableCollection<ItemModel> Items { get; private set; }
后续新增项的代码如下:
var targetGroup = MyGroup.FirstOrDefault(g => g.Name == "GroupX"); if (targetGroup != null) { targetGroup.Items.Add(new ItemModel { Name = "新增项名称" }); }
注意事项
两种方案都依赖ObservableCollection自带的INotifyCollectionChanged通知机制,添加新项后CollectionView会自动刷新界面,不需要手动触发更新。
内容的提问来源于stack exchange,提问作者Karim Mohammad
相关产品推荐
相关产品推荐

