2010-09-13 59 views

回答

4

不,這是不可能的。這是使用區分大小寫的反射在內部實現的。

2

有點太遲了,但這裏是我做了什麼,讓不區分大小寫綁定到一個WinForms組合框:

我已經創建了自己的類,從組合框繼承,並增加了以下屬性我的數據綁定到(原諒從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是,你也許可以忽略自定義方法,但你要實現INotifyPropertyChanged Value屬性。

+0

請注意,在上面的代碼中綁定到Value屬性的數據類型應該是基本值類型(或String)而不是複雜對象,否則Convert.ToString可能會返回兩個相同的字符串不同的對象(如果對象的類沒有覆蓋.ToString方法,則爲表示對象類型的字符串)。由於您可能使用它將數據庫行中的字段綁定到ComboBox的DataSource集合/表中的屬性或字段,因此這應該不成問題。 – MCattle 2012-09-21 16:00:01