首页 > 其他分享 >动态控件之UI和数据加载分离

动态控件之UI和数据加载分离

时间:2024-03-22 16:33:37浏览次数:20  
标签:控件 listbox 弹框 UI albums 数据 加载

一、问题说明

比如一个弹框页面中包含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就是一个封装的用户控件。

这样就保证了弹框能够直接弹出显示,数据会在加载好后进行展示,而不是弹框卡顿,等待数据加载完成后才会显示了。

标签:控件,listbox,弹框,UI,albums,数据,加载
From: https://www.cnblogs.com/qtiger/p/18089783

相关文章

  • 动态控件之控件的数据绑定
    一、示例需求说明以进度条ProgressBar控件为例,C#动态生成ProgressBar实例_progressBar,并指定_progressBar.IsVisible=IsBusy,当iIsBusy发生变化时,需要产生相应的效果。 二、方式一定义属性:bool_isBusy=false;publicboolIsBusy{get=>_isBusy;set{......
  • Td-Genie v2.1.0版本发布(TDengine GUI图形界面工具)
    Td-Geniev2.1.0免费开源的TDengine时序数据库图形用户界面工具,为用户提供直观、易用的数据库管理和操作体验!介绍Td-Genie是一款功能全面、操作简便的TDengine时序数据库图形界面工具,V2.1.0目前支持的TDengineServer版本列表如下:TDengine2.x版本(2.6.0.34已测试)TDengine......
  • 解决出现javax.net.ssl.SSLHandshakeException: PKIX path building failed 或 sun.se
    From: https://www.cnblogs.com/luoxiao1104/p/16671501.html当我们从网络上根据url下载文件的时候可能会出现一下异常错误信息: javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:......
  • 开发者选项 选择日志级别 这个是个小米miui特有的选项,aosp里搜了下好像没有
    "Developeroptions""Selectloglevel" https://github.com/ingbrzy/Xiaomi.eu-MIUIv10-XML-Compare/blob/master/sakura/Settings.apk/res/values/strings.xmlhttps://github.com/ingbrzy/Xiaomi.eu-MIUIv11-XML-Compare/blob/master/davinci_stabl......
  • C# 02 控件
    1.焦点状态ActiveControl和FocusActiveControl=textBox1;默认光标焦点在文本框textBox1处textBox1.Focus();焦点转移到textBox12.日期选择显示在文本框创建伪DateTimePicker:TextBox文本框并上DateTimePicker缩小至箭头版。privatevoiddateTimePicker1_Cl......
  • 在 Google Colab 中使用 JuiceFS
    GoogleColaboratory(Colab)是一个由Google提供的云端Jupyter编程笔记本,直接通过浏览器即可进行Python编程。Colab充分利用谷歌的闲置云计算资源,为公众提供免费的的在线编程服务,以及免费的GPU资源,虽然在使用方面有一定的规则限制,但对于一般的研究和学习来说绰绰有余。访......
  • [Container] Building and Running Container Images
    Stepstocreateandruncontainers:1.CreateaDockerfile2.UsetheDockerfiletocreateacontainerimage3.UsethecontainerimagetocreatearunningcontainerDockerfileexampleFROMalpine#DefinesthebaseimageCMD["echo","Hel......
  • UE5中简易的UI管理框架(c++版,UE5.1)
    需求说明:在UE项目开发中,当UI界面较多的时候,就需要有一个管理功能出现,负责UI的生成、销毁、禁用等功能。基于此需求,采用栈先进后出的数据接口,编写了一个简易的UI管理框架。功能说明:1.支持UI的自动创建2.支持UI的按开启顺序关闭3.支持一件关闭所有UI4.支持开启当前UI后,禁......
  • 【RedHat】重启服务器进入了emergency mode紧急状态——UUID不匹配
    启动redhat系统时出现emergencymode,处于紧急模式。并提示可以在登录root用户输入root用户密码后,通过journalctl-xb查看系统日志;systemctlreboot重启系统;systemctldefault或者exit进入默认模式。进入紧急模式的通常原因有两种:一种是/etc/fstab文件开机自动挂载的......
  • Ubuntu2204 GUI root用户无法登录的处理方法
    Ubuntu2204GUIroot用户无法登录的处理方法背景今天上午同事cloneubuntu2204之后想通过GUI登录修改IP以及进行一些安全设置发现root用户登录输入密码后就会返回登录界面.会进入一个无线死循环的额状态.这里记录一下进行地址设置和解决root登录的问题.解决IP地址的设......