MAUI中如何刷新基于动态列表生成的XAML视图?
解决MAUI CollectionView添加新项后不刷新的问题
核心原因
你当前使用的company.tasks应该是普通的List<Task>,它没有实现INotifyCollectionChanged接口。当你向列表添加新项时,CollectionView无法感知到集合的变化;而重新赋值同一个List实例,CollectionView会认为数据源没有改变,所以不会刷新视图。
推荐解决方案:改用ObservableCollection
MAUI中专门设计了ObservableCollection<T>用于动态集合,它会在集合元素添加、删除或修改时自动通知视图更新,是处理动态列表的标准做法:
- 修改
company类中tasks的类型:
public ObservableCollection<Task> tasks { get; set; } = new ObservableCollection<Task>();
- 初始化时绑定一次数据源即可:
taskList.ItemsSource = company.tasks;
- 后续添加新任务时,直接操作这个集合,视图会自动刷新:
company.tasks.Add(new Task { /* 初始化任务属性 */ });
临时解决方案:手动强制刷新视图
如果因为某些原因无法改用ObservableCollection,可以通过重新设置ItemsSource为新的集合实例来强制CollectionView刷新:
方法1:先清空再重新赋值
taskList.ItemsSource = null; taskList.ItemsSource = company.tasks;
方法2:创建集合的新实例
taskList.ItemsSource = new List<Task>(company.tasks);
这样CollectionView会检测到数据源引用的变化,从而重新生成所有列表项。
注意:这种方法会重新渲染整个列表,性能上不如
ObservableCollection高效,适合临时场景使用。
内容的提问来源于stack exchange,提问作者CitrusBoy
相关产品推荐
相关产品推荐

