ich diese Lösung nicht mögen, aber es scheint zu funktionieren:
mit allen „Sortieren“
Erstellen einer Unterklasse von „PropertyDescriptorCollection“ Methoden außer Kraft setzen, nur um zurückzukehren „this“. Wenn also das Eigenschaftenraster sort aufruft, um die Reihenfolge der Eigenschaften zu ändern, passiert nichts.
Erstellen Sie eine Unterklasse von "ExpandableObjectConverter", bei der die Methode "GetProperties" überschrieben wurde, um eine Instanz von "NoneSortingPropertyDescriptorCollection" mit den Eigenschaften in der richtigen Reihenfolge zurückzugeben.
Verwenden Sie [TypeConverterAttribute (typeof (MyExpandableObjectConverter))], um Ihre Unterklasse von ExpandableObjectConverter zu verwenden.
public class NoneSortingPropertyDescriptorCollection : PropertyDescriptorCollection
{
public NoneSortingPropertyDescriptorCollection(PropertyDescriptor[] propertyDescriptors)
: base(propertyDescriptors)
{
}
public override PropertyDescriptorCollection Sort()
{
return this;
}
public override PropertyDescriptorCollection Sort(string[] names)
{
return this;
}
public override PropertyDescriptorCollection Sort(string[] names, System.Collections.IComparer comparer)
{
return this;
}
public override PropertyDescriptorCollection Sort(System.Collections.IComparer comparer)
{
return this;
}
}
public class MyExpandableObjectConverter : ExpandableObjectConverter
{
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
{
PropertyDescriptorCollection d = base.GetProperties(context, value, attributes);
List<PropertyDescriptor> props = new List<PropertyDescriptor>();
props.Add(d.Find("Before", false));
props.Add(d.Find("After", false));
NoneSortingPropertyDescriptorCollection m = new NoneSortingPropertyDescriptorCollection(props.ToArray());
return m;
}
}
[TypeConverterAttribute(typeof(MyExpandableObjectConverter))]
public class Inner
{
public string Before{get;set}
public string After(get;set}
}
Das würde bedeuten, das Verhalten zu überschreiben, wenn Sie von diesem Attribute erben können. – leppie
Entschuldigung, dies wirkt sich auf die Reihenfolge aller Eigenschaften im Eigenschaftenraster aus, ich möchte nur die Reihenfolge der Eigenschaften auf dem "inneren Objekt" steuern und den Benutzer wie gewohnt die Reihenfolge der anderen Eigenschaften steuern lassen. –
Nicht möglich, Sie können die Reihenfolge nur für alle angezeigten Eigenschaften ändern. –