J'écris une application graphique dans laquelle je dois activer les propriétés d'édition d'objets arbitraires (leurs types sont uniquement connus au moment de l'exécution).Types d'objets PropertyGrid et dynamiques
J'ai décidé d'utiliser le contrôle PropertyGrid pour activer cette fonctionnalité. J'ai créé la classe suivante:
[TypeConverter(typeof(ExpandableObjectConverter))]
[DefaultPropertyAttribute("Value")]
public class Wrapper
{
public Wrapper(object val)
{
m_Value = val;
}
private object m_Value;
[NotifyParentPropertyAttribute(true)]
[TypeConverter(typeof(ExpandableObjectConverter))]
public object Value
{
get { return m_Value; }
set { m_Value = value; }
}
}
Quand je reçois une instance d'un objet que je dois modifier, créer un wrapper pour et le définir comme l'objet sélectionné:
Wrapper wrap = new Wrapper(obj);
propertyGrid.SelectedObject = wrap;
Mais je Le problème ci-dessus ne fonctionne que lorsque le type d'obj est un type personnalisé (c'est-à-dire une classe que j'ai définie moi-même, ou un type complexe construit) mais pas quand obj est une primitive.
Par exemple, si je définis:
[TypeConverter(typeof(ExpandableObjectConverter))]
public class SomeClass
{
public SomeClass()
{
a = 1;
b = 2;
}
public SomeClass(int a, int b)
{
this.a = a;
this.b = b;
}
private int a;
[NotifyParentPropertyAttribute(true)]
public int A
{
get { return a; }
set { a = value; }
}
private int b;
[NotifyParentPropertyAttribute(true)]
public int B
{
get { return b; }
set { b = value; }
}
}
Et faire:
Puis tout fonctionne houle. D'autre part, quand j'effectuer les opérations suivantes:
int num = 1;
Wrapper wrap = new Wrapper(num);
propertyGrid.SelectedObject = wrap;
Ensuite, je peux voir la valeur « 1 » dans la grille (et il ne grayscaled) mais je ne peux pas modifier la valeur. J'ai remarqué que si je change le type de la propriété "Value" de Wrapper en int et supprime l'attribut TypeConverter, cela fonctionne. J'ai le même comportement pour les autres types et chaînes primitifs.
Quel est le problème?
Merci d'avance!
Merci beaucoup, cela a fait l'affaire! :) – Marina
Pourquoi cette ligne 'parentConverter.GetProperties (context.Instance);' return null? –