Frage

Wenn ich binden diese Aufgabe

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

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

zu einem Eigenschaftenraster, was im Wert Abschnitt des Objektes Raster angezeigt wird, ist der Klassenname von AgeWrapper, aber der Wert für AgeWrapper.Age.

Gibt es trotzdem zu machen, so dass im Eigenschaftenraster ich den Wert des zusammengesetzten Objekts zeigen kann (in diesem Fall, es AgeWrapper.Age) anstelle des Klassennamen des zusammengesetzten Objekts?

War es hilfreich?

Lösung

Sie benötigen einen Typ-Konverter zu erstellen und dann Anwendung, wenn ein Attribut der AgeWrapper Klasse. Dann wird das Eigenschaftenraster, dass Typ-Wandler verwenden, um die Zeichenfolge für immer angezeigt werden soll. Erstellen Sie einen Typkonverter so ...

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

Beachten Sie, dass es von Expandable erbt. Dies liegt daran, die AgeWrapper Klasse ein Kind Eigenschaft namens AgeWrapper.Age hat, die durch mit einer + Taste neben dem AgeWrapper Eintrag im Netz ausgesetzt werden muss. Wenn Ihre Klasse keine Kinder Eigenschaften haben, die Sie von Typeconverter geerbt dann statt aussetzen wollte. Nun wenden Sie diesen Konverter Ihre Klasse ...

[TypeConverter(typeof(AgeWrapperConverter))]
public class AgeWrapper
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top