zoukankan      html  css  js  c++  java
  • WPF ListBox虚拟化

    在ListBox加载大量数据的情况下,如果不进行虚拟化,内存将逐渐增大,长时间运行后将造成卡顿
    所以需要虚拟化
    写法

    <ListBox x:Name="listBox" VirtualizingStackPanel.VirtualizationMode="Recycling"  VirtualizingStackPanel.IsVirtualizing="True">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate >
                <VirtualizingStackPanel  Orientation="Vertical" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>
    

    VirtualizationMode包括RecyclingStandard

    Recycling:重复利用
    Standard:创建和丢弃容器
    

    测试:定时向ListBox加入数据

    Timer timer;
    int number = 1;
    timer=new Timer();
    timer.Interval = 1;
    timer.Elapsed += AddData;
    listBox.ItemsSource = new ObservableCollection<string>();
    timer.Start();
    
    private void AddData(object sender, ElapsedEventArgs e)
    {
        listBox.Dispatcher.Invoke(() =>
        {
            number++;
            var dataContext = listBox.ItemsSource as ObservableCollection<string>;
            if (dataContext != null)
                dataContext.Add(number.ToString());
            if (listBox.Items.Count > 0)
            {
                listBox.ScrollIntoView(listBox.Items[listBox.Items.Count - 1]);
            }
            if (dataContext != null && dataContext.Count > 200)
            {
                dataContext.Clear();
            }
    
        });
    }
    

    参考资料

    How to use UI virtualization with redefined ListBox templates
    VirtualizationMode Enum
    WPF 列表开启虚拟化的方式

    示例代码

    VirtualizingListBox

    学习技术最好的文档就是官方文档,没有之一。
    还有学习资料Microsoft LearnCSharp LearnMy Note
    如果,你认为阅读这篇博客让你有些收获,不妨点击一下右下角的推荐按钮。
    如果,你希望更容易地发现我的新博客,不妨点击一下关注

  • 相关阅读:
    第七周作业
    第六周作业
    CSS
    12 week work
    7 week work
    6 week work 3
    6 week work 2
    6 week work 1
    常用的网络服务小总结
    网络基础设置
  • 原文地址:https://www.cnblogs.com/Lulus/p/15737513.html
Copyright © 2011-2022 走看看