C#Windows窗体应用程序ListView:如何强制ListView不更新?

C#Windows窗体应用程序ListView:如何强制ListView不更新?,c#,C#,我知道您可以使用方法ListView.refresh()强制刷新ListView。但是,如何在每次插入对象时强制阻止ListView更新其列表(出于设计目的) 代码: 上述操作将在我的listView 1中插入一个新行,listView将自动更新其列表,并将该新行添加到最底部的行中我想防止自动将数据添加到我的可视列表中,我只想在单击我提供的按钮时更新数据,因此您可以创建一个类来管理您的状态: public class ListViewStateHelper { pr

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

代码:


上述操作将在我的
listView 1
中插入一个新行,
listView
将自动更新其列表,并将该新行添加到最底部的行中我想防止自动将数据添加到我的可视列表中,我只想在单击我提供的按钮时更新数据

,因此您可以创建一个类来管理您的状态:

   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 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();
}

或者,您只需创建一个全局变量来保存数据源并对其进行操作,就不需要state helper类。

请具体说明
出于设计目的,我强制阻止ListView更新其列表
这是什么意思this@TheGeneral我已经添加了更多的细节。为什么不直接将数据添加到数组中,然后在单击按钮时只将其添加到
项中呢?@JohanP我可以这样做,但是直接更新ListView不可能吗?您可以在开始更新条目时调用
ListView.BeginUpdate()。完成后,调用
ListView.EndUpdate()
。这将确保更新期间不会发生刷新。
   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();
}