我在C#中有一个属性网格,加载一个'PropertyAdapter'对象(我的一个对象的基本包装器,用相应的标签显示相关属性)
我在其中一个属性(DataType,它返回可能值的枚举)上有一个TypeConverter,因为我想将属性网格的可用值限制为Decimal和Integer,使用以下两种方法
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(new List<Constants.DataTypes>() { Constants.DataTypes.Decimal, Constants.DataTypes.Integer });
}
这正如我想要的那样在属性网格上显示,当我双击属性网格中的属性字段时,它很高兴地在Integer和Decimal之间切换。类似地,我可以使用鼠标滚轮滚动属性字段组合框中的选项。
但是,如果我使用属性字段作为组合框并从下拉列表中选择一个值,我会得到标准属性网格错误框,其中包含错误:
'System.String'类型的对象不能 转换为类型 'Pelion.PM3.Utils.Constants +数据类型'。
我假设我可以使用Type转换器中的Converter覆盖来捕获这些并将它们转换为Enum of DataTypes,但是当我从下拉列表中选择而不是双击或'mouseewheeling时,为什么属性网格会失败'在下拉?
答案 0 :(得分:3)
从组合框下拉列表中选择时,该值将以字符串形式返回。我不确定为什么会这样,但我以前见过。我认为基本上双击或滚动鼠标滚轮会更改值集合中的值,而从下拉列表中选择就像将字段值编辑为字符串一样。然后,您将字符串中的值转换为枚举值。