Comment changer dynamiquement la valeur d'un attribut d'une instance ?
Bonjour,
En ce moment, je travail sur l’utilisation (affichage et édition) des attributs des propriétés d'un objet. L'objet est lui bindé directement sur une propertyGrid.
Pour info, le propertyGrid présente 1 objet « personne » qui est composé de 2 objets « adresse ». Les « adresses » sont aussi accessible dans la propertygrid par l’utilisation de l’instruction suivante : [TypeConverter(typeof(ExpandableObjectConverter))]
La classe static ci-dessous me sert de boite à outil pour modifier dynamiquement les valeurs des attributs.
Mon probleme est le suivant, lorsque je change dynamiquement la valeur (ex : code postal) d’un attribut de l’adresse1, l’attribut de l’adresse2 est modifié lui aussi.
En faite, le TypeDescriptor travail sur les type d’objet alors qu’il faudrait que je puisse travailler sur l’instance de l’objet.
Merci par avance de votre aide.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public static class PropertyDescriptorDynamic
{
public static void uSetReadOnly(object instance, string property, bool isReadOnly)
{
if (instance != null)
{
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(instance.GetType())[property];
ReadOnlyAttribute attribute = descriptor.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
FieldInfo field = attribute.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
field.SetValue(attribute, isReadOnly, BindingFlags.NonPublic | BindingFlags.Instance, null, null);
}
}
}
// changement dynamique des valeur de lattribut pour ADRESSE1
PropertyDescriptorDynamic.uSetReadOnly(ADRESSE1, "CODEPOSTAL", false);
PropertyDescriptorDynamic.uSetReadOnly(ADRESSE1, "VILLE", false);
|
Cordialement,
Cédric
Comment modifier dynamiquement le ReadOnly attribut d'un objet
Tu fais de la reflexion, GetProperties va te cherchercher tes propriétés.
Ton zip code addr 1 et zip code addr 2 ont le même nom de property (à priori).
static ? :vomi:
Code:
public static void uSetReadOnly(object instance, string property, bool isReadOnly)
tu passes quoi comme "instance" ?