Question

Quand je lie cet objet

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

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

dans une grille de propriétés, ce qui est indiqué dans la section des valeurs de la grille de propriétés correspond au nom de classe d’AgeWrapper, mais correspond à la valeur de AgeWrapper.Age.

Y a-t-il un moyen de faire en sorte que dans la grille de propriétés, je puisse afficher la valeur de l'objet composite (dans ce cas, il s'agit de AgeWrapper.Age), au lieu du nom de classe de cet objet composite?

Était-ce utile?

La solution

Vous devez créer un convertisseur de type, puis l'appliquer à l'aide d'un attribut à la classe AgeWrapper. Ensuite, la grille de propriétés utilisera ce convertisseur de type pour obtenir l'affichage de la chaîne. Créez un convertisseur de type comme celui-ci ...

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

Notez qu'il hérite de ExpandableObjectConverter. En effet, la classe AgeWrapper a une propriété enfant appelée AgeWrapper.Age qui doit être exposée en plaçant un bouton + à côté de l'entrée AgeWrapper dans la grille. Si votre classe n'a aucune propriété enfant que vous souhaitez exposer, héritez plutôt de TypeConverter. Appliquez maintenant ce convertisseur à votre classe ...

[TypeConverter(typeof(AgeWrapperConverter))]
public class AgeWrapper
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top