我需要显示一个实时刷新的数据在Listview 上面,但是按照网上的资料是可以更新数据了,但是不能实时的刷新,点中Item才可以显示出来,请教一下有遇到过此类问题吗?https://www.cnblogs.com/cadlife/articles/2257784.html

解决方案 »

  1.   

    listView  clear () -》 for 循环list <> cach 里面的listviewItem , 所有操作在一个线程里面不断更新数据但是效果并不是我想的那样,选中一项会更新一次
      

  2.   

    Refresh 呢?
      

  3.   


    refresh 、 invalidate  都是可以的, 但是界面刷新太快了,闪眼,当时使用虚拟模式就是为了解决这个更新数据太快的问题不知道有什么设置可以解决这个问题
    谢谢
      

  4.   

    使用线程在刷新的,感觉 ListviewItem 添加到listView 里面是没有问题的, 但是  ListviewItem 中的数据感觉没有及时更新上,点击一下就可以更新一下值
      

  5.   

    是的,我也是这么想的。可是当我把cacheitems retrieve 过后,在ListView里面并没有及时更新,但是选中一下就可以更新一次,这个不明白            this.ItemsSource = this.GetAllListViewItems();
                this.CurrentCacheItemsSource = this.ItemsSource;
                LoadListViewItems(this.CurrentCacheItemsSource);  private void LoadListViewItems(List<ListViewItem> items)
            {
                listView.Items.Clear();   
                if (items == null)
                {
                    stripStatusInfo.Text = "当前总共记录数为:0";  
                    return;
                }
                  
                listView.GridLines = true;
                listView.FullRowSelect = true;
                listView.View = View.Details;
                listView.Scrollable = true;
                listView.MultiSelect = false;
                listView.HeaderStyle = ColumnHeaderStyle.Clickable;
                listView.Visible = true;
                
                listView.VirtualListSize = items.Count;
                listView.VirtualMode = true;
                listView.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(listView_RetrieveVirtualItem);            stripStatusInfo.Text = "当前总共记录数为:" + items.Count;          
            }  void listView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
            {
                if (this.CurrentCacheItemsSource == null || this.CurrentCacheItemsSource.Count == 0)
                {
                    return;
                }            e.Item = this.CurrentCacheItemsSource[e.ItemIndex];
                if (e.ItemIndex == this.CurrentCacheItemsSource.Count)
                {
                    this.CurrentCacheItemsSource = null ;
                }
            }可是cacheItems 
      

  6.   

    LoadListViewItems(this.CurrentCacheItemsSource);
    之后
    listView.Refresh();
      

  7.   


    listView.Refresh() 一次listview 刷新一次呀,我在线程里面1S 更新一次数据,listview界面看起来就是一闪一闪的 , 双缓冲也试了,还是不行
      

  8.   

    既如此,你就没有必要用什么虚模式了,
    再说只需对 listview 追加数据即可,并无全部重新添加的必要
      

  9.   


    listview 所有的数据都会更新,所以只能把items clear 后再重新加载一下更新数据,目前没有好的办法实现,不知道有什么好的办法可以实现,谢谢
      

  10.   

    有没有认识.net大神的可以帮忙转发一下吗?感觉虚拟模式还是有用的,只要解决一下为什么刷新的时候需要点一下就可以了
      

  11.   

    需要做个后台线程,用Begininvoke去刷新UI。
    很简单,C#教程上都有这样的例子
      

  12.   

    https://blog.csdn.net/ygcxydzx/article/details/79483571
      

  13.   

    先把listview清空从新绑定一下listview
      

  14.   

    数据刷新后加上这两行代码, listView1.VirtualListSize = myCache.Count;
     listView1.Invalidate();