我有一个ArrayList,它经常更改。
ListView显示ArrayList的数据,因此当ArrayList发生更改时,必须快速更改此ListView。
所以我写了这样的代码:
ArrayList ar;
ListView lv;
paintmethod()
{
lv.items.clear();
lv.addlistview(ar);
lv.invalidate();
}
private void addlistview(ArrayList arr)
{
lv.Items.Add(arr.somedata.tostring(),arr.somedata.tostring());
}
此代码有效,但当ArrayList更改时,ListView不会立即刷新。
它刷新了20秒,30秒甚至1分钟。
如何解决此问题呢?
答案 0 :(得分:2)
尝试以下内容并查看更好。在更新多个listView项时,最好使用BeginUpdate()和EndUpdate()。因为在调用EndUpdate方法之前,BeginUpdate()会阻止控件的绘制。
paintmethod()
{
lv.BeginUpdate();
lv.items.clear();
lv.addlistview(ar);
lv.EndUpdate();
}
向ListView添加多个项目的首选方法是使用 ListView.ListViewItemCollection的AddRange方法(已访问 通过ListView的Items属性)。这使您可以添加 单个操作中列表中的项目数组。
这应该可以大大提高性能。
答案 1 :(得分:1)
是否有理由将listview.ItemsSource绑定到observablecollection?然后,您只需要对可观察集合进行处理,这将逐步通知列表视图。
答案 2 :(得分:0)
this.SuspendLayout();
lv.items.clear();
lv.addlistview(ar);
lv.invalidate();
this.ResumeLayout(false);