将文件一个一个地添加到我的ListView中

本文关键字:一个 我的 ListView 添加 文件 | 更新日期: 2023-09-27 18:16:12

我有ListView,我想填充。所有我想做的是得到我的List与所有项目,并将其添加到我的ListView,但我希望它是逐渐的。

My List

Dictionary<string, double> collection;

模型:

public class MainViewModel
{
    public DataTable PieData { get; private set; }
    public MainViewModel()
    {
        this.PieData = GetTestData();
    }
    private static DataTable GetTestData()
    {
        DataTable dtData = new DataTable("DATA");
        dtData.Columns.Add(new DataColumn("Name", typeof(string)));
        dtData.Columns.Add(new DataColumn("Value", typeof(double)));
        foreach (KeyValuePair<string, double> item in collection)
            dtData.Rows.Add(new object[] { item.Key, item.Value });
        return dtData;
    }
}

我的定时器:

private DispatcherTimer timer;
public void CreateTimer()
{
    timer = new DispatcherTimer();
    timer.Tick += timer_Tick;
    timer.Interval = new TimeSpan(0, 0, 0, 0, 100);
}

添加到我的ListView通过我的定时器:

private void timer_Tick(object sender, EventArgs e)
{
    foreach (KeyValuePair<string, double> item in collection)
        ipStatisticsListView.Items.Add(new MyItem { IP = item.Key, Percent = item.Value });
}

目前发生的事情是,虽然我在每个添加操作之间声明100毫秒,但我有半秒的延迟,然后我可以看到LisView内的所有列表

将文件一个一个地添加到我的ListView中

如果一个键可以包含多个值,则字典必须是一个列表。所以使用下面的方法之一。字典不会复制数据表中的值,因为字典和数据表中的行值之间存在链接。

            DataTable dtData = new DataTable("DATA");
            Dictionary<string, List<double>> collection1 = dtData.AsEnumerable()
                .GroupBy(x => x.Field<string>("Name"), y => y.Field<double>("Value"))
                .ToDictionary(x => x.Key, y => y.ToList());
            Dictionary<string, double> collection2 = dtData.AsEnumerable()
                .GroupBy(x => x.Field<string>("Name"), y => y.Field<double>("Value"))
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());
​

发生这种情况的原因是因为当一个新项目被添加到ListView控件中时,有一个invalidate事件导致控件重新绘制自己。如果添加项之间的频率太低,则添加新项可能会导致控件再次失效,从而"暂停"绘制列表。

也许当ListView达到在内容范围内可见的最大项目数量时,它不再需要在添加新项目时重新绘制自己,因此它可以绘制自己。

您是否尝试增加计时器滴答之间的间隔以查看是否发生相同的问题?

相关文章: