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 建立一个ComboBoxDataSource绑定对象

创建一个表,具有两行两列的特性,第一列是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的界面显示,采用DataSourcedt“String”列的值,所以下拉列表会自动把dt“String”列所有字符自动添加。
ValueMember属性是指定,当选择具体的“String”列里的值,会选择“Value”列的值与之对应。

comboBox1.DisplayMember = "String";
comboBox1.ValueMember = "Value";

2.2.3 ComboBoxAxisPrm.IsEnable进行绑定

当用户对ComboBox的某个下拉选项进行选中时,将会把ComboBoxSelectedValue属性值,即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 绑定相关推荐

  1. 解决winform combobox绑定数据时触发changed事件

    我们在使用comboBox组件时如果同时设置了SelectedIndexChanged事件,在绑定combobox事件时会先触发一下changed事件,怎么能在绑定时不触发,再绑定之后的用户选择触发呢 ...

  2. C# winform ComboBox绑定数据源时触发SelectedIndexChanged事件的处理

    ComboBox二级联动时,发现一个问题.如下 var wardList = (from ward in alarmInfoListselect new{ward.AlarmJQ,ward.Alarm ...

  3. winform c#绑定combobox下拉框 年度代码。

    winform c#绑定combobox下拉框 年度代码. comboBox1.Items.AddRange(new object[] { "2012", "2013&q ...

  4. WinForm 中ComboBox 绑定总结

    1. DataTable 用DataTable直接绑定,只需要设置DataSource.DisplayMember.ValueMember三个属性即可. Code this.cmbConsumeSup ...

  5. ListBox和ComboBox绑定数据简单例子

    1. 将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容 //自定义了Person类(有Name,Age,Heigth等属性) List<Person> per ...

  6. combobox绑定数据

    今天开发过程中遇到Combobox绑定数据的需求,研究了下绑定DataTable,现在Po上来,有时间研究下绑定其他类型的数据,到时候再来更新. 废话不多说,上代码: //清空一下绑定 m_Combo ...

  7. 用ArrayList作数据源为ComboBox绑定,带“请选择...”

    这几天一直想给ComboBox加个"请选择..."项,不过老提示使用DataSource后不能修改其属性 上网查了查,自己试了试,终于成功了...呵呵.... 用ArrayList ...

  8. comboBox绑定对象数组 c# 1614065159

    comboBox绑定对象数组 c# 1614065159 绑定数据源 复选框控件.DataSource = 数组对象 指定显示值 复选框控件.DisplayMember = 对象的属性名称 示例

  9. WinForm DataGridView 绑定泛型List(ListT)/ArrayList不显示的原因和解决

    背景:无意间遇到了一个不大不小的问题,希望对一些遇到的人有所帮助! 一.问题 WinForm DataGridView 绑定泛型List (List<T>)/ArrayList不显示,UI ...

最新文章

  1. ViewPager嵌套ViewPager 滑动冲突
  2. UIWebView实现离线浏览
  3. nginx 配置404错误页面
  4. HTTP/3 来啦,你还在等什么?赶紧了解一下
  5. 数据结构与算法之前缀数
  6. Python实现比较两个列表(list)范围
  7. 离开APM的弹性云还是真弹性吗
  8. for update引发了血案
  9. MIKE水动力笔记1_岸线及水深数据之依靠全球数据库资源提取的方法
  10. SVN可视化管理工具
  11. python统计数据指标的常见方法
  12. 分治法解决赛程安排问题
  13. html背景音乐教程pdf,HTML插入背景音乐方法【全】
  14. 确定电气间隙和爬电距离
  15. ARM SIMD NEON 简介 (翻译自 Introducing NEON Development Article)
  16. 复杂命令行参数gcc的-Wl的含义,注意是字母l不是数字1
  17. 再也不用担心因为PowerBI 可视化看板加班了——手把手详细教学
  18. 华三路由交换配置命令_h3c路由器配置命令都有哪些 h3c路由器配置命令大全【详解】...
  19. 小白的努力——此时少年山巅客,凭栏尽收快哉风
  20. 【Mac 软件推荐】控制外接显示器的亮度和声音-MonitorControl

热门文章

  1. MySQL数据库---Day 06
  2. (原创)SurfaceView介绍和使用
  3. 20221106大明山千亩田
  4. SAP ABAP BOM 更新函数 CSAP_MAT_BOM_MAINTAIN使用
  5. win7登陆密码忘记了的几种找回方法
  6. Proxifier设置方法
  7. 求字符串长度【三种解题思路】
  8. Ansible 之 Playbook详解
  9. 交叉编译libX11
  10. 手机上如何在线期货开户的?