动态控件之UI和数据加载分离
一、问题说明
比如一个弹框页面中包含listbox控件,弹框页面打开时,先进行listbox初始化,然后再进行数据加载,如果数据加载较慢,这里就会出现,弹框一直无法显示出来,直到数据加载完成,赋值给listbox控件,才会显示。
_listbox.ItemsSource = data;
二、解决方式
解决方式也简单,就是异步,多线程等等吧。比如加载数据的方法如下:
private void InitAlbumData(string? text = "") { IsBusy = true; List<AlbumModel>? albums = new List<AlbumModel>(); Task.Run(() => { Thread.Sleep(5000); albums = MockData.GetAlbums(text); }).ContinueWith(t => { if (t.IsCompletedSuccessfully) { // 数据加载完成后更新数据源 albumViews.Clear(); if (albums != null && albums.Count > 0) { foreach (var album in albums) { AlbumView albumView = new AlbumView(album); albumViews.Add(albumView); } } IsBusy = false; } }, TaskScheduler.FromCurrentSynchronizationContext()); }
这样就可以了。
TaskScheduler.FromCurrentSynchronizationContext() 确保在UI线程上更新数据源
涉及到数据的ui控件的均应该在ContinueWith中执行,等待数据加载好后,再进行处理,比如上边AlbumView就是一个封装的用户控件。
这样就保证了弹框能够直接弹出显示,数据会在加载好后进行展示,而不是弹框卡顿,等待数据加载完成后才会显示了。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架