Winform ComboBox 绑定
1. 需求
我有一个参数类(AxisPrm
),需要与界面的ComboBox
进行绑定,ComboBox
下拉选项框有两个选项,分别是“是”和“否”,当下拉选择“是”的时候给AxisPrm.IsEnable
赋值true
,反之,赋值为false
。
public class AxisPrm
{//是否使能public bool IsEnable { get; set; }
}
2. 解决方案
2.1 不进行绑定
如果不是有绑定的思想,我想最直接的方式如下所示,但是当外部程序对Prm.IsEnable
进行改变的时候,需要重新刷新ComboBox
的值,如果外部程序没有手动刷新,值无法传递给界面,那么很可能造成误判:
comboBox1.items.Add("是");
comboBox1.items.Add("否");
if(Prm.IsEnable)//如果值在外部发生改变,需要重新刷新
{comboBox1.SelectedIndex = 0;
}
else
{comboBox1.SelectedIndex = 1;
}
comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{switch(comboBox1.SelectedItem){case "是":Prm.IsEnable = true;break;case "否":Prm.IsEnable = false;break;}
}
2.2 进行绑定
2.2.1 建立一个ComboBox
的DataSource
绑定对象
创建一个表,具有两行两列的特性,第一列是String
类型,第二列是bool
类型。就如键值对一般,选择具体的String
值,就有想对应的bool
值与之对应。这里之所以不直接用Dictionary
类是因为DataSource
不支持复杂类型(以后可能支持)。
DataTable dt = new DataTable();
dt.Columns.Add("String", typeof(string));
dt.Columns.Add("Value", typeof(double));
dt.Rows.Add("是", true);
dt.Rows.Add("否", false);
comboBox1.DataSource = dt;
2.2.2 ComboBox
显示与值绑定
这里的工作只是与ComboBox
有关,DisplayMember
意思是ComboBox
的界面显示,采用DataSource
里dt
的“String”
列的值,所以下拉列表会自动把dt
的“String”
列所有字符自动添加。
ValueMember
属性是指定,当选择具体的“String”
列里的值,会选择“Value”
列的值与之对应。
comboBox1.DisplayMember = "String";
comboBox1.ValueMember = "Value";
2.2.3 ComboBox
与AxisPrm.IsEnable
进行绑定
当用户对ComboBox
的某个下拉选项进行选中时,将会把ComboBox
的SelectedValue
属性值,即dt
里面的Value
赋值给AxisPrm.IsEnable
。
comboBox1.DataBindings.Add("SelectedValue", Prm, "IsEnable", false, DataSourceUpdateMode.OnPropertyChanged);
2.2.4 AxisPrm实现INotifyPropertyChanged接口
当外部程序对AxisPrm.IsEnable
进行修改的时候,将同步到界面ComboBox
中
//AxisPrm 完整版
public class AxisPrm: NotifyBase
{public bool m_IsEnable;//是否使能public bool IsEnable {get{return m_IsEnable;}set{m_IsEnable = value;NotifyPropertyChanged(() => IsEnable);}}
}
public class NotifyBase : INotifyPropertyChanged
{public event PropertyChangedEventHandler PropertyChanged;public void NotifyPropertyChanged<T>(Expression<Func<T>> property){if (PropertyChanged == null)return;var memberExpression = property.Body as MemberExpression;if (memberExpression == null)return;PropertyChanged.Invoke(this, new PropertyChangedEventArgs(memberExpression.Member.Name));}
}
3. 总结
当ComboBox
内容少的时候可以不用绑定,但是外部程序对值进行修改的时候,不能忘记对ComboBox
进行刷新。不绑定的方式,代码量较少。绑定的方式代码量较多,值更新采用自动化管理,但是在DataBindings
阶段,需要把绑定的ComboBox
属性名称完全写正确,否则将失败。
源代码参考:
蓝奏云
Winform ComboBox 绑定相关推荐
- 解决winform combobox绑定数据时触发changed事件
我们在使用comboBox组件时如果同时设置了SelectedIndexChanged事件,在绑定combobox事件时会先触发一下changed事件,怎么能在绑定时不触发,再绑定之后的用户选择触发呢 ...
- C# winform ComboBox绑定数据源时触发SelectedIndexChanged事件的处理
ComboBox二级联动时,发现一个问题.如下 var wardList = (from ward in alarmInfoListselect new{ward.AlarmJQ,ward.Alarm ...
- winform c#绑定combobox下拉框 年度代码。
winform c#绑定combobox下拉框 年度代码. comboBox1.Items.AddRange(new object[] { "2012", "2013&q ...
- WinForm 中ComboBox 绑定总结
1. DataTable 用DataTable直接绑定,只需要设置DataSource.DisplayMember.ValueMember三个属性即可. Code this.cmbConsumeSup ...
- ListBox和ComboBox绑定数据简单例子
1. 将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容 //自定义了Person类(有Name,Age,Heigth等属性) List<Person> per ...
- combobox绑定数据
今天开发过程中遇到Combobox绑定数据的需求,研究了下绑定DataTable,现在Po上来,有时间研究下绑定其他类型的数据,到时候再来更新. 废话不多说,上代码: //清空一下绑定 m_Combo ...
- 用ArrayList作数据源为ComboBox绑定,带“请选择...”
这几天一直想给ComboBox加个"请选择..."项,不过老提示使用DataSource后不能修改其属性 上网查了查,自己试了试,终于成功了...呵呵.... 用ArrayList ...
- comboBox绑定对象数组 c# 1614065159
comboBox绑定对象数组 c# 1614065159 绑定数据源 复选框控件.DataSource = 数组对象 指定显示值 复选框控件.DisplayMember = 对象的属性名称 示例
- WinForm DataGridView 绑定泛型List(ListT)/ArrayList不显示的原因和解决
背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助! 一.问题 WinForm DataGridView 绑定泛型List (List<T>)/ArrayList不显示,UI ...
最新文章
- ViewPager嵌套ViewPager 滑动冲突
- UIWebView实现离线浏览
- nginx 配置404错误页面
- HTTP/3 来啦,你还在等什么?赶紧了解一下
- 数据结构与算法之前缀数
- Python实现比较两个列表(list)范围
- 离开APM的弹性云还是真弹性吗
- for update引发了血案
- MIKE水动力笔记1_岸线及水深数据之依靠全球数据库资源提取的方法
- SVN可视化管理工具
- python统计数据指标的常见方法
- 分治法解决赛程安排问题
- html背景音乐教程pdf,HTML插入背景音乐方法【全】
- 确定电气间隙和爬电距离
- ARM SIMD NEON 简介 (翻译自 Introducing NEON Development Article)
- 复杂命令行参数gcc的-Wl的含义,注意是字母l不是数字1
- 再也不用担心因为PowerBI 可视化看板加班了——手把手详细教学
- 华三路由交换配置命令_h3c路由器配置命令都有哪些 h3c路由器配置命令大全【详解】...
- 小白的努力——此时少年山巅客,凭栏尽收快哉风
- 【Mac 软件推荐】控制外接显示器的亮度和声音-MonitorControl