ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

WPF ListBox虚拟化

2021-12-27 19:36:56  阅读:180  来源: 互联网

标签:dataContext 虚拟化 ListBox number timer 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

标签:dataContext,虚拟化,ListBox,number,timer,WPF,listBox
来源: https://www.cnblogs.com/Lulus/p/15737513.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有