首页 > 解决方案 > C# Windows 窗体应用程序 ListView:如何强制 ListView 不更新?

问题描述

我知道您可以使用该方法强制刷新 ListView ListView.Refresh()。但是,如何在每次插入对象时强制停止 ListView 更新其列表(出于设计目的)?

代码:

string[] newData = { //Some strings };
ListViewItem newRow = new ListViewItem(newData);
listView1.Items.Add(newRow);

以上将在 my 中插入一个新行listView1listView并将自动更新其列表并将该新项目添加到最底部的行。我想防止将数据自动添加到我的可视列表中,我只想在单击我提供的按钮时更新数据

标签: c#

解决方案


所以你可以做的是创建一个类来为你管理你的状态:

   public class ListViewStateHelper
    {
        private readonly ListView _listView;
        private readonly List<string> _items;
        public ListViewStateHelper(ListView listView)
        {
            _listView = listView;
            _items = new List<string>();
        }

        public void AddItem(string value)
        {
            _items.Add(value);
        }

        public void DeleteItem(string value)
        {
            _items.Remove(value);
        }

        public void Refresh()
        {
            _listView.Items.AddRange(_items.Select(i => new ListViewItem(i)).ToArray());
        }

    }

然后创建一个全局变量并初始化它

   private readonly ListViewStateHelper _stateHelper;
    public Form1()
    {

        InitializeComponent();
        _stateHelper = new ListViewStateHelper(listView1);
    }

然后让您的事件处理程序调用它:

private void add_Click(object sender, EventArgs e)
{
    _stateHelper.AddItem("a");
}

private void delete_Click(object sender, EventArgs e)
{
    _stateHelper.DeleteItem("a");
}

private void refresh_Click(object sender, EventArgs e)
{
    _stateHelper.Refresh();
}

或者您可以简单地创建一个全局变量来保存您的数据源并对其进行处理,那么您就不需要状态助手类。


推荐阅读