Y a-t-il un moyen de créer un événement qui se déclenchera lorsque les attributs / valeurs de champ d'un objet changent? Par exemple, si l'objet a un champ appelé et que l'utilisateur effectue une action qui mettrait à jour ce numéro, un événement déclencherait qui mettrait à jour toutes les zones de texte du formulaire à afficher Valeurs de champ actuelles? P> EDIT:
Désolé, oui des propriétés ont été créées pour chaque champ. P> p>
4 Réponses :
On dirait que vous devriez vérifier le inotifyPropertychanged interface. Cela ne fonctionne pas pour les champs cependant, et vous devrez la mettre en œuvre manuellement. P>
en faire une propriété plutôt qu'un champ, et implémentez Vous pouvez alors écouter explicitement pour le inotifypropertychanged code> dans votre classe:
PropertyThanganed code> événement ou utilisez une liaison de données qui le gérera automatiquement p> p>
Est-ce que cette pratique courante de se connecter chaque fois qu'une propriété est modifiée?
@L - '' '' '' '' '' ''''''ai'-------- '' '' '' '' '' '' '' '' '' ', je ne pense pas que ce soit, pourquoi?
Je me demandais simplement pourquoi ce ne serait pas, car il est tellement plus facile de résoudre les problèmes de production lorsque vous avez des journaux complets (je parle de la mise en œuvre de la journalisation des modifications à chaque propriété)
Où allez-vous utiliser cela? P>
Si vous allez utiliser cela dans une application client, alors Mise en œuvre inotifyPropertychangned < / a> est la façon recommandée de travailler. p>
C'est un petit programme très simple qui vous permet de définir des valeurs de départ d'un avion en mouvement. Il suit les coordonnées X et Y et comporte quelques boutons qui vous permettent de l'avancer en fonction de sa direction et de sa vitesse, tournez-la à gauche, tournez-la, etc. Avec chaque bouton, il appelle les méthodes qui met à jour les propriétés de l'objet. , mais je veux qu'il met à jour les zones de texte chaque fois que vous appuyez sur le bouton. Actuellement, j'ai une méthode appelée UpdateTetText () après chaque appel de méthode. Je cherchais juste une meilleure façon de le faire
Vous devez utiliser des getters et des setters définis par l'utilisateur (c'est-à-dire des propriétés) pour déclencher manuellement l'événement. Regardez ce code, il devrait être assez simple:
// We declare a delegate to handle our event delegate void StateChangedEventHandler(object sender, StateChangedEventArgs e); // We declare event arguments class to specify, which value has changed to which value. public class StateChangedEventArgs: EventArgs { string propertyName; object oldValue; object newValue; /// <summary> /// This is a constructor. /// </summary> public StateChangedEventArgs(string propertyName, object oldValue, object newValue) { this.propertyName = propertyName; this.oldValue = oldValue; this.newValue = newValue; } } /// <summary> /// Our class that we wish to notify of state changes. /// </summary> public class Widget { private int x; public event StateChangedEventHandler StateChanged; // That is the user-defined property that fires the event manually; public int Widget_X { get { return x; } set { if (x != value) { int oldX = x; x = value; // The golden string which fires the event: if(StateChanged != null) StateChanged.Invoke(this, new StateChangedEventArgs("x", oldX, x); } } } }
x code>. Rien à faire. Li>
- Ils définissent la variable
x code> à la même valeur qu'il avait précédemment. Rien à faire. Nous vérifions l'intérieur du setter. LI>
- Ils définissent la variable
x code> et le modifient. C'est là que nous déclenchons l'événement. LI>
ul> Il est essentiel de vérifier si nous avons des gestionnaires d'événements enregistrés (c'est-à-dire notre événement n'est pas NULL) avant d'invoquer l'événement. Dans d'autres cas, nous aurons une exception. P> p>
Je ne suis que dans la classe de programmation de 200 niveaux. Je comprends celle des contrôles de forme. Mais l'objet que je fais référence est une instance d'une classe que j'ai créée. Comme il existe de multiples valeurs dans les objets, je suis un peu confus comment enregistrer un événement à suivre si l'un d'entre eux change.