如何判断ComboBox是否已绑定?现有绑定逻辑存在异常
嘿,这个问题我碰到过类似的情况,咱们来一步步捋清楚~
首先看你当前的判断条件cmbMaritalStatus.BindingContext==null,这个其实没法准确判断ComboBox是否已经完成绑定。因为BindingContext通常是从父容器(比如Form)继承来的,控件初始化后大概率就已经有值了,哪怕还没绑定任何数据源,所以哪怕你的ComboBox已经填充了内容,这个条件依然可能为true,导致每次点击都进入分支。
不用标志位当然可以解决,你可以换个更精准的判断依据,根据你绑定数据的方式来选:
方案1:检查数据源是否已设置
假设你的SetBindingToLookup方法内部是给ComboBox设置了DataSource属性(这是常规的绑定方式),那直接判断DataSource是否为null就行:
private void cmbMaritalStatus_Click(object sender, EventArgs e) { if (cmbMaritalStatus.DataSource == null) { cmbMaritalStatus.Text = string.Empty; FillComboboxes(); } }
方案2:检查Items集合是否为空
如果SetBindingToLookup是直接往Items里添加项(而不是用DataSource绑定),那可以判断Items的数量:
private void cmbMaritalStatus_Click(object sender, EventArgs e) { if (cmbMaritalStatus.Items.Count == 0) { cmbMaritalStatus.Text = string.Empty; FillComboboxes(); } }
不过这里要注意:如果你的dataSource本身是空的IEnumerable<CDX_MaritalStatus>,那绑定后Items也会是空,这时候这个判断会重复触发。如果有这种场景,你可以结合检查DataBindings里是否存在对应的绑定项:
if (!cmbMaritalStatus.DataBindings.Any(b => b.PropertyName == "SelectedValue")) { cmbMaritalStatus.Text = string.Empty; FillComboboxes(); }
额外建议:换个时机初始化绑定
其实点击事件并不是初始化绑定的最佳时机,你可以把绑定逻辑放到ComboBox的Enter事件,或者Form的Load事件里,这样只会执行一次,从根源上避免重复绑定的问题~
内容的提问来源于stack exchange,提问作者Ayal
相关产品推荐
相关产品推荐

