Pergunta

Quando eu ligar este objeto

public class MyObject
{ 
  public AgeWrapper Age
{
get;
set;
}
}

public class AgeWrapper
{
public int Age
{
get;
set;
}
}

a uma grade de propriedade, o que é mostrado na seção valor da grade de propriedade é o nome da classe de AgeWrapper, mas o valor para AgeWrapper.Age.

Existe uma maneira de fazer com que na grade de propriedade que eu possa mostrar o valor do objeto composto (neste caso, é AgeWrapper.Age), em vez do nome da classe do objeto composto?

Foi útil?

Solução

Você precisa criar um conversor de tipo e, em seguida, aplicar isso usando um atributo para a classe AgeWrapper. Em seguida, a grade de propriedade usará esse conversor tipo para obter a string para mostrar. Criar um conversor de tipo assim ...

public class AgeWrapperConverter : ExpandableObjectConverter
{
  public override bool CanConvertTo(ITypeDescriptorContext context, 
                                    Type destinationType)
  {
    // Can always convert to a string representation
    if (destinationType == typeof(string))
      return true;

    // Let base class do standard processing
    return base.CanConvertTo(context, destinationType);
  }

  public override object ConvertTo(ITypeDescriptorContext context, 
                                   System.Globalization.CultureInfo culture, 
                                   object value, 
                                   Type destinationType)
  {
    // Can always convert to a string representation
    if (destinationType == typeof(string))
    {
      AgeWrapper wrapper = (AgeWrapper)value;
      return "Age is " + wrapper.Age.ToString();
    }

    // Let base class attempt other conversions
    return base.ConvertTo(context, culture, value, destinationType);
  }  
}

Observe que ele herda de ExpandableObjectConverter. Isso ocorre porque a classe AgeWrapper tem uma propriedade filho chamado AgeWrapper.Age que precisa ser exposta por ter um botão + ao lado da entrada AgeWrapper na grade. Se sua classe não tem nenhum propriedades filho que você queria expor então em vez herdar de TypeConverter. Agora aplicar este conversor para a sua classe ...

[TypeConverter(typeof(AgeWrapperConverter))]
public class AgeWrapper
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top