2010-04-21 5 views
4

Quelle est la meilleure façon de garder un contrôle enfant à jour pour les changements dans le parent.comment informer les contrôles enfants d'un changement dans le parent

J'ai un certain nombre de contrôles enfants hébergés dans mon objet parent et je peux penser à deux façons de leur envoyer des informations de modification.

1) fil le contrôle enfant à un événement dans le parent et le feu de cet événement sur un changement du parent

2) tenir une liste des enfants dans un tableau et itérer à travers le réseau lorsque le changement a est arrivé et invoque une méthode dans l'enfant pour gérer les nouveaux changements.

J'espère que je le décris bien.

Les deux fonctionnent, mais il y a probablement une bonne façon de gérer cela et de la mauvaise façon.

EDIT: ci-dessous est mon code ... pour la méthode événementielle. Je ne suis pas content de la façon dont j'ai câblé l'enfant au parent, des sugestions.

Le parent ...

public class A_Parent  
{ 

public delegate void DelUpdateMessage( string msg); 

public event DelUpdateMessage UpdateMessage; 
public A_Parent() 
{ 
    a_Child1.prnt = this; 
    a_Child2.prnt = this; 
    a_Child3.prnt = this; 
    a_Child4.prnt = this; 
} 

private void FireUpdateMessageEvent( string message) 
{ 
    var handlers = UpdateMessage; 

    if (handlers != null) 
    handlers( message); 

} 
    } 

L'enfant ...

public class A_Child   
    { 
    A_Parent pnt; 
    public A_Parent prnt 
    { 
    set 
     { 
     pnt = value; 
     pnt.UpdateMessage += new A_Parent.DelUpdateMessage(pnt_UpdateMessage); 
     } 
    } 


void pnt_UpdateMessage(string msg) {  } 

} 

Répondre

5

Votre # 1 solution est le meilleur pari, car il vous permet de changer autour de votre mise en œuvre sans changement le parent. Puisque le parent ne se soucie pas s'il a des enfants, l'approche basée sur l'événement est idéale.

MISE À JOUR

L'approche inverse événement est de mauvaise foi. Les gens déclarent que les parents savent clairement ce que les enfants sont intéressés par eux, et j'ai simplement tendance à être en désaccord avec cette affirmation. Mes conceptions ont généralement des enfants qui s'intéressent dynamiquement au parent, et les enfants qui s'inscrivent aux événements sont généralement la façon la plus favorable de le faire.

Vous pouvez trouver de tels exemples dans le modèle .NET, tels que la page qui contient des événements auxquels vous pouvez lier.

0

Le mécanisme d'événement est une routine courante pour de telles tâches. Ce sera beaucoup plus flexible que votre deuxième solution.

2

Les événements ne sont pas le bon choix ici. Le parent n'a jamais de problème pour déterminer quels contrôles enfant doivent être notifiés. Ajoutez simplement une méthode publique à l'UC, comme UpdateMessage(). Le parent peut les appeler directement.

Réservez des événements pour pouvoir avertir les auditeurs lorsque vous ne savez pas quels écouteurs pourraient être intéressés. Avoir un «événement inverse» comme vous envisagez est malsain, il garde une référence sur le formulaire. Un formulaire ne doit jamais être référencé pour pouvoir récupérer les données collectées lorsqu'il se ferme. Ce n'est pas un vrai problème ici, puisque la référence est tenue par un contrôle des enfants, mais le principe est valable.

+0

merci pour cela ... J'apprécie le commentaire "événement inverse" – fishhead

+0

Je suis d'accord. Puisque le parent sait quels enfants il a, il devrait simplement appeler des méthodes publiques sur ces enfants. –

Questions connexes