2009-02-27 46 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属性来访问它。

希望有所帮助。