Cuadrícula de propiedad en objetos compuestos
-
04-07-2019 - |
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?
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