Pregunta

Cuando enlace este objeto

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

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

a una cuadrícula de propiedades, lo que se muestra en la sección de valores de la cuadrícula de propiedades es el nombre de clase de AgeWrapper, pero el valor de AgeWrapper.Age.

¿Hay alguna forma de hacerlo de modo que en la cuadrícula de propiedades pueda mostrar el valor del objeto compuesto (en este caso, es AgeWrapper.Age), en lugar del nombre de clase de ese objeto compuesto?

¿Fue útil?

Solución

Necesitas crear un convertidor de tipo y luego aplicarlo usando un atributo a la clase AgeWrapper. Luego, la cuadrícula de propiedades usará ese tipo de convertidor para que la cadena se muestre. Crea un convertidor de tipos como este ...

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);
  }  
}

Note que hereda de ExpandableObjectConverter. Esto se debe a que la clase AgeWrapper tiene una propiedad secundaria llamada AgeWrapper.Age que debe exponerse al tener un botón + junto a la entrada AgeWrapper en la cuadrícula. Si su clase no tenía ninguna propiedad secundaria que quisiera exponer, en su lugar, herede de TypeConverter. Ahora aplique este convertidor a su clase ...

[TypeConverter(typeof(AgeWrapperConverter))]
public class AgeWrapper
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top