Jak wywołać zdarzenie w usercontrol i złapać je na stronie głównej?

Mam UserControl i muszę powiadomić Stronę nadrzędną, że Przycisk w UserControl został kliknięty. Jak wywołać wydarzenie w UserControl i złapać je na stronie głównej? Próbowałem użyć static, i wielu zasugerowało mi, aby wybrać się na wydarzenia!

Author: Sipo, 2011-05-31

3 answers

Sprawdź Zdarzenie Bubbling -- http://msdn.microsoft.com/en-us/library/aa719644%28vs.71%29.aspx

Edycja, aby dodać szybki przykład: (i dodatkowa Edycja, aby poprawić formatowanie)

Kontrola Użytkownika

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());
}

Strona Główna / Formularz

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
}
 83
Author: Jemes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 11:23:52

Po prostu dodaj wydarzenie do swojej kontroli:

public event EventHandler SomethingHappened;

I podnieść go, gdy chcesz powiadomić rodzica:

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

Jeśli potrzebujesz niestandardowych EventArgs spróbuj EventHandler<T> zamiast T być typem pochodzącym z EventArgs.

 7
Author: Zebi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-31 19:56:51

Lub jeśli szukasz bardziej odsprzęgniętego rozwiązania, możesz użyć modelu wydawcy / Abonenta messenger, takiego jak MVVM Light Messenger tutaj

 1
Author: Phil Murray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-31 20:05:31