Xamarin.Forms下拉刷新图标持续刷新无法停止问题求助
问题解决:刷新图标持续转动且应用卡顿
核心问题原因
你在MyNoteViewModel中用new关键字重新定义了IsBusy属性,覆盖了基类ViewModelBase中带属性变更通知的实现。这导致IsBusy从true变回false时,无法通知UI更新,ListView的刷新状态一直无法结束。
具体修复步骤
1. 移除ViewModel中自定义的IsBusy属性
打开MyNoteViewModel.cs,删除以下行:
public new bool IsBusy { get; private set; }
ViewModelBase(来自MvvmHelpers)已经封装了带PropertyChanged通知的IsBusy属性,直接使用即可。
2. 优化Refresh方法,确保IsBusy被正确重置
修改Refresh方法,加入try-finally块,保证无论刷新过程是否出现异常,IsBusy都会被设为false:
async Task Refresh() { IsBusy = true; try { // 移除不必要的模拟延迟,仅作测试用 // await Task.Delay(2000); Note.Clear(); var notes = await NoteService.GetNote(); Note.AddRange(notes); } finally { IsBusy = false; } }
3. 可选优化:避免无意义的延迟
如果Task.Delay(2000)只是为了测试刷新效果,建议在生产代码中移除,它会导致不必要的等待,加重应用卡顿。
4. 确认绑定配置无误
XAML中ListView的IsRefreshing绑定配置是正确的:
IsRefreshing="{Binding IsBusy, Mode=OneWay}"
只要ViewModelBase的IsBusy属性正确触发PropertyChanged事件(MvvmHelpers的默认实现已经处理),UI就能实时感知状态变化。
额外卡顿排查
如果修复后仍有卡顿,检查以下点:
- 确保
Note模型的属性也实现了INotifyPropertyChanged,避免UI更新时的性能问题 - 确认
SQLiteAsyncConnection的操作没有阻塞主线程(当前NoteService的实现是异步的,这部分没问题)
内容的提问来源于stack exchange,提问作者PuineaGip
相关产品推荐
相关产品推荐

