J'ai un UserControl
et je dois informer la page parent qu'un bouton dans le UserControl
a été cliqué. Comment déclencher un événement dans le UserControl
et l'attraper sur la page principale? J'ai essayé d'utiliser static
, et beaucoup m'ont suggéré d'aller à des événements!
Consultez Bulle d'événements - 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 la mise en forme)
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(this, 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
}
Ajoutez simplement un événement sous votre contrôle:
public event EventHandler SomethingHappened;
et élevez-le lorsque vous souhaitez informer le parent:
if(SomethingHappened != null) SomethingHappened(this, new EventArgs);
Si vous avez besoin d'EventArgs personnalisés, essayez EventHandler<T>
à la place avec T
étant un type dérivé de EventArgs
.
Ou si vous cherchez une solution plus découplée, vous pouvez utiliser un modèle d'éditeur/abonné de messagerie tel que MVVM Light Messenger ici