繁体   English   中英

Windows窗体ComboBox - 不区分大小写的数据绑定

[英]Windows Forms ComboBox - case insensitive data-binding

如果我是一个winforms组合框的数据绑定,有没有办法使绑定大小写不敏感?

例如,如果组合框绑定到值为FOO的属性,那么让它选择值为Foo的组合框项?

不,这是不可能的。 这是使用区分大小写的反射在内部实现的。

游戏有点晚了,但这是我为了允许对WinForms ComboBox进行不区分大小写的绑定而做的事情:

我创建了自己的继承自ComboBox的类,并添加了以下属性来绑定我的数据(请原谅VB.NET的自动转换):

public object Value {
    get {
        if (string.IsNullOrEmpty(ValueMember)) {
            return Text;
        } else {
            return SelectedValue;
        }
    }
    set {
        if (DesignMode)
            return;

        // If we're databound, Value is the SelectedValue.  Otherwise, it's the Text.
        object oldValue = string.IsNullOrEmpty(ValueMember) ? Text : SelectedValue;

        // Want to make sure we're comparing apples to apples, and not specific instances of apples.
        string strOld = oldValue == null ? string.Empty : Convert.ToString(oldValue);
        string strNew = value == null ? string.Empty : Convert.ToString(value);

        if (!string.Equals(strOld, strNew, StringComparison.OrdinalIgnoreCase)) {
            if (ValueMember.HasValue) {
                if (value != null && !string.IsNullOrEmpty(Convert.ToString(value))) {
                    SelectedItem = Items.OfType<object>.FirstOrDefault((System.Object i) => string.Equals(Convert.ToString(FilterItemOnProperty(i, ValueMember)), strNew, StringComparison.OrdinalIgnoreCase));
                } else {
                    SelectedIndex = -1;
                }
            } else {
                Text = value != null ? value.ToString : string.Empty;
            }
            ValidateField();
            if (PropertyChanged != null) {
                PropertyChanged(this, new PropertyChangedEventArgs("Value"));
            }
        }
    }
}

ValidateField是一个您可以忽略的自定义方法,但您需要为Value属性实现INotifyPropertyChanged

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM