在做ListView前行变换颜色时候出现WPF ItemContainerGenerator.ContainerFromItem返回Null报错

WPF ItemContainerGenerator.ContainerFromItem返回Null

问题描述:出现一组数据超过10行就会返回null,数据量条数少于10行没问题
解决过程:
通过查看这篇博客发现可能跟虚拟化容器有关:
https://blog.csdn.net/u013002790/article/details/78210551
解决办法:

1、设置ListView属性VirtualizingStackPanel.VirtualizationMode=“Standard”
VirtualizingStackPanel.IsVirtualizing=“False”

2、动态设置:如果后台代码返回null,例如, lsvTrays.UpdateLayout();
var lv = lsvTrays.ItemContainerGenerator.ContainerFromItem(t) as ListViewItem;

那么在这行代码之前加入一句:lsvTrays.UpdateLayout()

动态使 等于A类变成 绿色字体

        private void StatusChanged(object sender, EventArgs e)
    {           
       
        if (lsvTrays.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
        {
            foreach (TraysnInfo t in lsvTrays.Items)
            {
                lsvTrays.UpdateLayout();
                var lv = lsvTrays.ItemContainerGenerator.ContainerFromItem(t) as ListViewItem;
                
                foreach (string n in nums)
                {                        
                    if (t.LineNum == n)
                    {
                        lv.Foreground = Brushes.Green;
                    }
                }
            }
        }
    }

使其颜色变换的函数调用方式:
lsvTrays.ItemContainerGenerator.StatusChanged += new EventHandler(StatusChanged);

补充参考这篇博文:
https://www.cnblogs.com/jasenkin/archive/2011/08/22/listview_virtual_model.html 如果数据量大的时候开启虚拟化模式
Winform ListView虚拟模式

一、前言

虚拟模式在许多情况下都很有用。 如果必须从已存在于内存中的非常大的集合填充一个 ListView 对象,则为每项创建一个 ListViewItem 对象会很浪费。 在虚拟模式下,从缓冲之中获取所需的数据进行加载,性能会有很大提高。 在其他情况下,可能需要经常重新计算 ListViewItem 对象的值,对整个集合进行此操作将产生不可接受的性能。

如下为虚拟模式的一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值