2009-02-27 51 views
4

我希望能夠在屬性網格中顯示一個顯示某些「字符串」值但返回「int」值的下拉列表。.Net PropertyGrid DropDownList - 與顯示值不同的返回值

例如,讓集我得到這個類:

public class MyObjectOptions : StringConverter 
{ 
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context) 
    { 
     return true; 
    } 

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) 
    { 
     MyObjectCollection mm = new MyObjectCollection(); 

     List<String> names = new List<String> 
     foreach (MyObject m in mm) 
     { 
      m.Id // Need to store this somewhere ... 
      names.Add(m.Name); 
     } 

     return new StandardValuesCollection(name); 
    } 

    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) 
    { 
     return true; 
    } 
} 

這裏是PropertyGrid控件

public class MyObjectProperty 
{ 
    [TypeConverter(typeof(MyObjectOptions))] 
    public int Id 
    { 
     get { return this.id; } 
     set { this.id = value; } 
    } 
} 

我班上使用像你可以看到,我想存儲的標識對象,但我想在下拉列表中顯示它的名稱...我嘗試使用哈希表,但它不起作用...

順便說一句 - 我使用的是.Net版本3.5,但我只使用WinForm(不是WPF)。

回答

2

你不能使用GetStandardValues。如果必須將整數值限制爲1,5和10,則此方法非常有用。

如果要在屬性值中顯示字符串,只需重寫TypeConverter的ConvertTo和ConvertFrom方法。 PropertyGrid將使用下拉列表中已轉換的字符串。

關於您的散列表,如果其內容是靜態的,您可以將它存儲在TypeConverter中。如果它是動態的,最好是讓網格的目標實例管理它。從你的轉換器,你將能夠通過TypeDescriptorContext.Instance屬性來訪問它。

希望有所幫助。