IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Détection changement de valeur des propriétés d'un objet


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 82
    Points
    82
    Par défaut Détection changement de valeur des propriétés d'un objet
    Bonjour à tous.

    Je cherche actuellement une technique permettant de détecter un changement de valeur sur n'importe quelle propriété d'un objet donné, y compris les propriétés "utilisateur". Une sorte d'évènement global.

    Comment est-ce possible ? (dites-moi que ça l'est )

    Merci d'avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    faut que l'objet implémente INotifyPropertyChanged (de mémoire) et ca pourra le faire
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 82
    Points
    82
    Par défaut
    Donc ce n'est pas possible avec n'importe quel objet ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    avec n'importe quel objet ca me parait "compliqué"

    Maintenant, peut-etre qu'avec un peu d'utilisation de la reflection, il est "envisageable" de venir ajouter des comportements aux objets.. mais celà me semble quand meme assez difficile à faire

    bon courage et bonne chance
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 82
    Points
    82
    Par défaut
    En fait je suis en train de déveloper une Property Grid personnalisée, incluant par exemple l'affichage des évènements d'un objet, et la représentation visuelle de leur déclenchement.

    J'ai réussi la partie évènement (en grande partie à l'aide de la réflexion), mais la partie propriétés me pose problème à cause de cette détection des changements de valeurs des propriétés.

    N'y a-t-il que le framework qui ait accès à cette fonctionnalité ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Un objet n'a pas forcément besoin d'implémenter INotifyPropertyChanged. Par contre, il faut qu'un événement (quelconque) soit lancé lorsqu'une modification survient.

    L'intérêt de INotifyPropertyChanged, c'est qu'on est sûr que cet objet implémente l'événement PropertyChanged et qu'il est possible d'écrire du code prennant en charge cet événement (utilisation classique d'une interface qui défini un comportement) quel que soit le type réel de l'objet implémentant INotifyPropertyChanged. Par contre, si la modification d'une propriété ne déclenche pas manuellement l'événement PropertyChanged, son changement ne pourra pas être suivi.

    La PropertyGrid n'a pour but que d'afficher les changements quand ils apparaissent ou il y a d'autres fonctionnalités comme historiser les valeurs etc. ? Si c'est uniquement de l'affichage et que le but n'est pas de faire du temps réel mais qu'un délai (qq ms) est acceptable, tu peux faire un check périodique des valeurs et comparer avec des valeurs que tu aurais sauvegardé.

  7. #7
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 82
    Points
    82
    Par défaut
    Tout d'abord merci pour vos réponses (j'avais oublié de me montrer civilisé ).

    En fait un délai est acceptable, le temps réel absolu ne m'étant pas utile. Il ne fait qu'afficher les valeurs de façon à refléter au mieux l'état de l'objet cible (donc le délai ne doit pas être trop important non plus). La partie "évènements" de mon contrôle gère une historisation, mais pas la partie "propriétés" qui reste proche du PropertyGrid du framework.

    J'avais bien pensé à utiliser un timer pour scruter régulièrement les valeurs de toutes les propriétés, mais j'hésite toujours à utiliser cette technique, craignant à chaque fois uen trop grande et inutile consommation de ressources, en particulier processeur. De plus j'ai peur que pour un objet cible complexe, le nombre de propriétés à scruter rende le temps de traitement trop long. C'est pourquoi j'aurai préféré la possibilité de réagir de façon uniquement ciblée au changement de chaque propriété.

    Donc je me pose une autre question : comment procède le PropertyGrid du framework ?

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Si t'as un objet avec 1 000 000 de propriétés, ça risque effectivement d'être lent. C'est tout de même rarement le cas. Et même si c'était le cas, le million de propriétés ne pourra pas être affiché sur dans la zone visible du contrôle en même temps et donc il est toujours possible d'optimiser le code pour ne synchroniser que les valeurs des propriétés visibles dans le contrôle.

    PropertyGrid du framework s'appuie sur les PropertyDescriptor qui fourni une méthode abstract GetValue qui, d'après la MSDN, s'implémente en général via la réflexion. Toujours d'après la MSDN, cette méthode appelle automatiquement deux événements (OnComponentChanging et OnComponentChanged) de l'interface IComponentChangeService. Après, tu peux regarder l'exemple sur la page MSDN de l'interface, mais il y a tout de même une modification du code. Peut-être que le designer injecte ces modifications via réflexion. Pas l'air simple tout ça .

  9. #9
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 82
    Points
    82
    Par défaut
    J'ai bien utilisé les PropertyDescriptor avec GetValue au travers de la réflexion.
    Mais je vais creuser du côté des deux évènements que tu m'a suggéré. Ce pourrait bien être ce que je cherche.

    Je vous tiendrai au courant, merci encore.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 118
    Points : 52
    Points
    52
    Par défaut
    Je voulais savoir si tu avais réussi à faire ce que tu voulais.

    Car cela m'interesse aussi.

    A+

Discussions similaires

  1. Modifier la valeur des propriétés
    Par philnext dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2010, 12h53
  2. Réponses: 8
    Dernier message: 29/12/2009, 11h52
  3. Réponses: 2
    Dernier message: 25/02/2009, 16h04
  4. rafraichir les valeurs des propriétés inserées
    Par akkeri dans le forum VBA Word
    Réponses: 1
    Dernier message: 14/12/2007, 23h58
  5. Réponses: 2
    Dernier message: 31/05/2005, 07h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo