将文件一个一个地添加到我的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
内的所有列表
如果一个键可以包含多个值,则字典必须是一个列表。所以使用下面的方法之一。字典不会复制数据表中的值,因为字典和数据表中的行值之间存在链接。
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
达到在内容范围内可见的最大项目数量时,它不再需要在添加新项目时重新绘制自己,因此它可以绘制自己。
您是否尝试增加计时器滴答之间的间隔以查看是否发生相同的问题?