2013-07-30 71 views
0

我无法将uint的显示属性转换为string格式的PropertyGrid控件。这是我做的:c#propertygrid从uint转换为字符串

var fruits = new SortedDictionary<uint, string> 
{ 
    {0, "Apple"}, 
    {1, "Orange"}, 
    {3, "Watermelon"}, 
}; 

public class FruitConverter : StringConverter 
{ 
    public override bool CanConvertFrom(ITypeDescriptorContext context, 
             Type sourceType) 
    { 
     if (sourceType == typeof(uint) && fruits.ContainsKey(sourceType)) 
     return true; 

     return base.CanConvertFrom(context, sourceType); 
    } 

    public override object ConvertFrom(ITypeDescriptorContext context, 
            CultureInfo culture, 
            object value) 
    { 
     if (sourceType == typeof(uint) && fruits.ContainsKey(sourceType)) 
      return fruits[value]; 

     return base.ConvertFrom(context, culture, value); 
    } 
} 

public class Fruit 
{ 
    [ReadOnly(true)] 
    [DisplayName("Type of fruit")] 
    [TypeConverter(typeof(FruitConverter))] 
    public uint FruitTypeCode { get; set; } 
} 

但财产FruitTypeCode仍显示为uint而不是作为一个string,我做错了什么?

+0

您的代码不会编译。 “水果”是否是FruitConverter上的一个属性?另外,'sourceType'不是'ConvertFrom'上的参数。 –

+0

尝试继承TypeConverter而不是StringConverter – TakeMeAsAGuest

+0

msdn中的示例与您想要实现的非常接近。 http://msdn.microsoft.com/en-us/library/ayybcxe5(v=vs.71).aspx – TakeMeAsAGuest

回答

1

这应该工作:

public class FruitConverter : TypeConverter 
{ 
    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) 
    { 
     return fruits[(uint)value]; 
    } 
} 
+0

这是有效的。非常感谢。我应该实施'CanConvertTo()'方法吗?或者,如果'fruits'字典不包含'(uint)值' –

+0

如果转换器有一个真正本地化的用法(例如只用于这个属性),它并不是真的必要,但是如果你打算广泛使用它,是的,你应该实现CanConvertTo并且检查destinationType是一个字符串。 –