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!
Réponses
Trop de publicités?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
}
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
.
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.