将文件逐个添加到我的ListView中

时间:2015-10-06 15:07:43

标签: c# listview

我想要填充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

中的所有列表

2 个答案:

答案 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达到内容范围内可见的最大项目数时,无论何时添加新项目,它都不再需要重新绘制,因此它可以自行绘制。

您是否尝试增加计时器滴答之间的间隔以查看是否出现同样的问题?