我想要填充ListView
。
我想做的就是让我的List
包含所有项目并将其添加到我的ListView
中,但我希望它能逐渐增加。
我的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
答案 0 :(得分:0)
如果一个键可以包含多个值,那么我的字典必须是一个列表。因此,请使用以下方法之一。字典不会复制值,因为字典与数据表中的行值之间存在链接。
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());
答案 1 :(得分:0)
发生这种情况的原因是,当一个新项目被添加到ListView
控件中时,会出现一个无效事件,导致控件重绘自身。如果添加的项目之间的频率太低,添加新项目可能会导致控件再次使自身无效,因此&#34;暂停&#34;绘制清单。
也许当ListView
达到内容范围内可见的最大项目数时,无论何时添加新项目,它都不再需要重新绘制,因此它可以自行绘制。
您是否尝试增加计时器滴答之间的间隔以查看是否出现同样的问题?