Property Grid auf Composite-Objekte
-
04-07-2019 - |
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?
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