C# ListBox 子项数据更新
今天在倒腾ListBox控件的数据编辑时,遇到了一个小小的问题,现在就把解决方法记录下来,如果各位道友有更好的方法,一定要留言赐教。
问题还原:
有一个界面,有这么一个ListBox用来显示所有的角色信息:

角色类的源代码如下,反正可以想象成任意自定义的类都可以:
/// <summary>
/// 单个角色对象
/// </summary>
public class RoleItem
{
#region Public Property /// <summary>
/// 角色的唯一代码
/// </summary>
public string RoleCode { get; set; } = Guid.NewGuid().ToString("N"); /// <summary>
/// 角色名称
/// </summary>
public string RoleName { get; set; } /// <summary>
/// 角色描述
/// </summary>
public string Description { get; set; } /// <summary>
/// 关联的账户列表
/// </summary>
public List<string> Accounts { get; set; } = new List<string>(); #endregion #region Object Override /// <summary>
/// 返回对象的字符串标识形式
/// </summary>
/// <returns></returns>
public override string ToString()
{
return RoleName;
} #endregion }
在控件加载的时候进行数据的初始化,这里不能使用datasouce来绑定数据源,不然不能修改单个的。下面的初始化也只是例子而已。
List<RoleItem> roles = new List<RoleItem>();// 假设已经获取到了数据
foreach(var m in roles)
{
listBox1.Items.Add(m);
}
在点击界面的编辑按钮时,获取listBox1的选中项。然后修改类中的RoleName 属性,所以正常的代码如下编写:
private void userButton5_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItem is RoleItem role)
{
// 点击了编辑按钮并获取了需要修改的信息
role.RoleName = role.RoleName + "1";
}
}
上述代码为示例,重要的是结果发现listBox1中的显示没有更新,然是数据确实更新了,但是即使调用了下面的三个刷新方法也是无济于事。
listBox1.Refresh();
listBox1.Invalidate();
listBox1.Update();
但是我在调用listBox1.Items.Add(object obj)时却会自动更新,即使翻看微软的源代码,也没有找到哪里可以刷新显示的方法,源代码地址:
所以参数上述的Add方法可以刷新,也就是整个变量重新赋值也可以刷新,所以上述的编辑代码变更成了
private void userButton5_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItem is RoleItem role)
{
// 点击了编辑按钮并获取了需要修改的信息
role.RoleName = role.RoleName + "1";
listBox1.Items[listBox1.SelectedIndex] = listBox1.Items[listBox1.SelectedIndex];
}
}
暂时解决了方法,当点击按钮时,控件的界面也会跟着刷新,如果需要全部刷新,就要循环操作。
这个问题来自开发一个简单通用的C-S架构的框架模版,地址为https://github.com/dathlin/ClientServerProject
C# ListBox 子项数据更新的更多相关文章
- WPF:间接支持虚拟化的ListBox
/// <summary> /// 间接实现了虚拟化的ListBox /// 子项必须实现IVisible接口 /// 你可以在IsVisible发生改变时实现一系列自定义动作 /// 比 ...
- 通通玩blend美工(6)下——仿iPhone滚动选择器的ListBox(交互逻辑)
原文:通通玩blend美工(6)下--仿iPhone滚动选择器的ListBox(交互逻辑) 上一篇我们已经把界面画出来了,这篇我们就来制作交互的逻辑吧.上一篇的电梯: http://www.cnblo ...
- WPF|快速添加新手引导功能(支持MVVM)
阅读导航 前言 案例一 案例二 案例三(本文介绍的方式) 如何使用? 控件如何开发的? 总结 1. 前言 案例一 站长分享过 眾尋 大佬的一篇 WPF 简易新手引导 一文,新手引导的效果挺不错的,如下 ...
- Template、ItemsPanel、ItemContainerStyle、ItemTemplate(包括ListBox的Item子项是横向排列)
Template.ItemsPanel.ItemContainerStyle.ItemTemplate 分类: WPF2011-10-12 10:13 4716人阅读 评论(0) 收藏 举报 data ...
- WP8__实现ListBox横向滑动及子项绑定图片等控件
<!--实现绑定的图片等信息 ListBox水平滚动--> <Grid> <Grid.Resources> <Style x:Key="horizo ...
- wpf ListBox 双击事件时在子项添加Style 确保选中
<ListBox ItemTemplate="{StaticResource CardPictureTemplate}" VirtualizingPanel.CacheLen ...
- 自定义LISTBOX内子项为checkbox或者radio时,关于IsChecked绑定
IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}&q ...
- windows编程学习笔记(三)ListBox的使用方法
ListBox是Windows中的一种控件,一般被当做子窗口使用,Windows中所有子窗口都是通过发送一个通知码到父窗口父窗口通过WM_COMMAND消息接收,并在此消息中处理,并控制子窗口,Lis ...
- #400 – 使用ItemsPanel 属性将WrapPanel 作为ListBox的显示面板(Using a WrapPanel as the Items Panel for a ListBox)
原文:#400 – 使用ItemsPanel 属性将WrapPanel 作为ListBox的显示面板(Using a WrapPanel as the Items Panel for a ListBo ...
随机推荐
- JS 如何获取当前上一个月、下一个月和月份所含天数
在数据报表查询中,经常需要设置查询的日期区间,如查询2018-02-01至2018-02-28的整月数据,这时需要提供快捷整月查询按钮: 如: 一般日期年月日之间由"-"或者&qu ...
- 解题报告:hdu1013 Digital Roots
2017-09-07 22:02:01 writer:pprp 简单的水题,但是需要对最初的部分进行处理,防止溢出 /* @theme: hdu 1013 Digital roots @writer: ...
- codeforce diversity
2017-08-25 14:59:34 writer:pprp 题意如下:给你一个串字符,再给你一个数字,表示在字符串中的各不相同的字符个数, 问你最少需要改变几个字符达到要求,不能达到要求就输出im ...
- Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused (Connection refused)
一.linux中配置redis,使用java连接测试时报错: Exception in thread "main" redis.clients.jedis.exceptions.J ...
- php+mysql中文无法检索出数据
将数据库字符集设置为latin,并将字符转码成gb2312 将字符长度打印出来发现:因为latin中一个字符占用2个字节,utf-8中一个字符占用3个字节,这样一来检索的时候就会出现错误 实验过程: ...
- WinCE数据通讯之SqlCE数据同步篇
上一篇总结了WinCE通过WebService进行数据通讯的交互方式,今天整理个SqlCE数据同步方式的内容.先说下软件环境:终端平台使用WinCE5.0+SqlCE2.0,服务器使用Windows ...
- java -d . **.java 与 java **.java 的区别
如何在命令行模式下运行带包的java文件 https://blog.csdn.net/lytor/article/details/17048361 javac,使用"-d ."与省 ...
- JavaScript 获取对象属性和方法
ShineJaie 原创整理,转载请注明出处. 一.获取对象属性和方法 Object.keys() 返回对象的可枚举属性和方法的名称数组. Object.getOwnPropertyNames() 返 ...
- Java并发之synchronized深入
一句话总结synchronized: JVM会自动通过使用monitor来加锁和解锁,保证了同时只有一个线程可以执行指定代码,从而保证了线程安全,同时具有可重入和不可中断的性质. 一.synchron ...
- 什么是JSON?
JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定的符号标注. {} 双 ...