Comment faire pour afficher un objet dynamique dans la propriété de la grille?
J'ai un personnalisé du type d'objet qui doit être modifiable dans PropertyGrid
:
public class CustomObjectType
{
public string Name { get; set; }
public List<CustomProperty> Properties {get; set;}
}
Qui dispose d'une liste de propriétés personnalisées:
public class CustomProperty
{
public string Name { get; set; }
public string Desc { get; set; }
public Object DefaultValue { get; set; }
Type type;
public Type Type
{
get
{
return type;
}
set
{
type = value;
DefaultValue = Activator.CreateInstance(value);
}
}
}
Le principal problème ici est que le PropertyGrid
de contrôle ne permet pas de modifier, ni utilise les outils d'édition pour la propriété DefaultValue
qui est instancié à l'avance par la mise en valeur de CustomProperty
's champ Type
.
Type de DefaultValue
n'est connue qu'à l'exécution.
Par ailleurs, j'ai besoin de fournir une coutume TypeConverter
pour CustomProperty
biens Type
pour afficher une liste déroulante des types pris en charge (par exemple, Int
, String
, Color
, MyOwnClass
).
Comment dois-je procéder?
OriginalL'auteur JBeurer | 2010-08-16
Vous devez vous connecter pour publier un commentaire.
Pour aller vers le bas de cette route, vous devez créer un personnalisé
PropertyDescriptor
par propriété. Vous exposez ensuite via un customTypeConverter
, ou (en alternance)ICustomTypeDescriptor
/TypeDescriptionProvider
. Exemple:Gravel,
CustomObjectType.this[string].set{}
devrait êtrevalues[name] = value;
si les propriétés sont modifiées. Grand morceau de code, BTW.OriginalL'auteur Marc Gravell
Je pense que Marc Gravel peut-être mal compris le contexte un peu.
J'ai essayé de modifier les propriétés de CustomObjectTypes pas le "CustomObjects" eux-mêmes.
Voici modifié Marc du code qui fait que:
Cela fonctionne, cependant, je trouve ça un peu maladroit solution.
Parce que je suis en fournissant une PropertyDescriptor pour Objet et CustomPropertyConverter pour CustomProperty, qui n'est pas réellement faire quelque chose de valable.
Pourtant, je ne peux pas les supprimer.
Est-il un moyen élégant pour permettre la modification des propriétés de type Objet(comme la Valeur par défaut) l'utilisation appropriée des éditeurs selon les informations d'exécution de l'objet?
OriginalL'auteur JBeurer