2008-10-28 7 views
2

Quand je lie cet objetGrille propriété sur les objets Composite

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

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

à une grille de propriété, ce qui est indiqué dans la section de la valeur de la grille de la propriété est le nom de la classe de AgeWrapper, mais la valeur pour AgeWrapper.Age . Y a-t-il un moyen de faire en sorte que dans la grille de propriétés je puisse montrer la valeur de l'objet composite (dans ce cas, c'est AgeWrapper.Age), au lieu du nom de classe de cet objet composite?

Répondre

5

Vous devez créer un convertisseur de type, puis l'appliquer en utilisant un attribut à la classe AgeWrapper. Ensuite, la grille de propriétés utilisera ce convertisseur de type pour obtenir la chaîne à afficher. Créez un convertisseur de type comme ceci ...

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. C'est parce que la classe AgeWrapper a une propriété enfant appelée AgeWrapper.Age qui doit être exposée en ayant un bouton + à côté de l'entrée AgeWrapper dans la grille. Si votre classe n'a pas de propriétés enfants que vous souhaitez exposer, héritez à la place de TypeConverter. Maintenant, appliquez ce convertisseur à votre classe ...

[TypeConverter(typeof(AgeWrapperConverter))] 
public class AgeWrapper 
Questions connexes