如何在 属性 网格 属性 中实现查找值

How to implement a lookup value in property grid property

使用 C#、Winforms、PropertyGrid。

假设我有以下 class:

public class SomeClass
{
   public int Key;
   public Guid LookupKey;
}


//This class is a lookup class
public class Lookup
{
  public Guid Key;
  public string Description;
}

例如查找数据 table

Key                  Description   
[SomeGuidValue1]     Value1  
[SomeGuidValue2]     Value2


SomeClass.LookupKey = Lookup.Key 

现在.. 我已经让 UIEditor 显示了一个包含查找值的 DataGridView table。但是在 属性 网格中.. 我显示的是 Guid 值而不是描述。如何在 属性 网格 属性 中保持 Guid(密钥)的同时显示描述?即我想显示 Value1 而不是 [SomeGuidValue1] 但它应该保留对 [SomeGuidValue1]?

的引用

您可以创建一个 TypeConverter,如下所示:

public class SomeClass
{
    public int Key { get; set; }

    [TypeConverter(typeof(LookupConverter))]
    public Guid LookupKey { get; set; }
}

public class LookupConverter : TypeConverter
{
    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        if (destinationType == typeof(string)) //property grid will ask for this
        {
            var key = (Guid)value;
            return ConvertGuidToDescription(...) // TODO: implement this
        }

        return base.ConvertTo(context, culture, value, destinationType);
    }
}