c# - C# Windows 窗体应用程序 ListView:如何强制 ListView 不更新?
问题描述
我知道您可以使用该方法强制刷新 ListView ListView.Refresh()
。但是,如何在每次插入对象时强制停止 ListView 更新其列表(出于设计目的)?
代码:
string[] newData = { //Some strings };
ListViewItem newRow = new ListViewItem(newData);
listView1.Items.Add(newRow);
以上将在 my 中插入一个新行listView1
,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 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();
}
或者您可以简单地创建一个全局变量来保存您的数据源并对其进行处理,那么您就不需要状态助手类。
推荐阅读
- amazon-cognito - AWS Cognito,检索旧的编辑自定义值
- amazon-web-services - AWS Step-Function:将特定值从一个 AWS lambda 传递到另一个在 step 函数并行状态下
- android - 使用导航架构组件时后退按钮不起作用
- maven - GoogleCloudPlatform / Java 入门 - 基本应用程序失败
- linux - 目前是否可以在 Linux 上使用带有 Core 3.1 的伪 tty
- c++ - 为什么我不能将引用作为 std::async 的函数参数传递
- core-location - CLAccuracyAuthorization 是否影响 CLCircularRegions 或 Beacon Regions?
- swift - 验证字符串是否包含特定单词
- pandas - Pyspark EMR Notebook - 无法将文件保存到 EMR 环境
- kotlin - Apollo Federation 无法在 docker-compose 中运行连接:无法加载服务定义...原因:连接 ECONNREFUSED 127.0.0.1:80