48 votes

Comment puis-je soulever un événement dans un contrôle utilisateur et l'attraper dans la page principale?

J'ai un Custom UserControl que j'ai construit et que je dois notifier la page principale (ou une page parente dans laquelle se trouve ce contrôle) lorsqu'un bouton de la Custom Uscontrol est cliqué, comment puis-je déclencher un événement dans la Custom Usercontrol et l'attraper dans le Page d'accueil? J'ai essayé d'utiliser statique et beaucoup m'ont suggéré d'aller pour des événements!

88voto

Jemes Points 1985

Consultez Event Bubbling - http://msdn.microsoft.com/en-us/library/aa719644%28vs.71%29.aspx

Modifier pour ajouter un exemple rapide: (et modification supplémentaire pour améliorer le formatage)

Contrôle utilisateur

 public event EventHandler StatusUpdated;

private void FunctionThatRaisesEvent()
{
    //Null check makes sure the main page is attached to the event
    if (this.StatusUpdated != null)
       this.StatusUpdated(new object(), new EventArgs());
}
 

Page principale / formulaire

 public void MyApp()
{
     //USERCONTROL = your control with the StatusUpdated event
     this.USERCONTROL.StatusUpdated += new EventHandler(MyEventHandlerFunction_StatusUpdated);
}

public void MyEventHandlerFunction_StatusUpdated(object sender, EventArgs e)
{
         //your code here
}
 

7voto

Zebi Points 3773

Ajoutez simplement un événement sous votre contrôle:

 public event EventHandler SomethingHappened;
 

et le soulève lorsque vous souhaitez informer le parent:

 if(SomethingHappened != null) SomethingHappened(this, new EventArgs);
 

Si vous avez besoin de EventArgs personnalisés, essayez plutôt EventHandler<T> avec T tant que type dérivé de EventArgs .

1voto

Phil Murray Points 2056

Ou si vous recherchez une solution plus découplée, vous pouvez utiliser un modèle éditeur / abonné de messagerie tel que MVVM Light Messenger ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X