Xamarin Forms:移除ObservableCollection分组子项后UI不更新的问题
问题原因与解决方案
问题根源
你的CalendarGroupModel继承自普通的List<CalendarModel>,而List<T>并未实现INotifyCollectionChanged接口。UI绑定依赖这个接口来感知集合内部元素的增删改操作,因此删除子项时UI无法收到更新通知;而根集合ObservableCollection<CalendarGroupModel>因为实现了该接口,所以删除分组项时UI能正常响应。
解决方案
将CalendarGroupModel的基类替换为ObservableCollection<CalendarModel>,这样子集合的元素变更会自动触发UI更新。
修改后的CalendarGroupModel代码:
public class CalendarGroupModel : ObservableCollection<CalendarModel> { public string Name { get; private set; } public string DateLabel { get; set; } public double CompletePercentage { get; set; } public string CompleteLabel { get; set; } public CalendarGroupModel(string name, List<CalendarModel> calendarEntries) : base(calendarEntries) { Name = name; } }
优化子项移除代码(避免枚举时修改集合的异常):
foreach (var group in CalendarGroupModels) { var targetItem = group.FirstOrDefault(a => a.CalendarID == calendarTable.CalendarID); if (targetItem != null) { group.Remove(targetItem); break; } }
内容的提问来源于stack exchange,提问作者Willertron
相关产品推荐
相关产品推荐

