У меня есть UserControl
, и мне нужно сообщить родительской странице, что нажата кнопка в UserControl
. Как поднять событие в UserControl
и перехватить его на главной странице? Я попытался использовать static
, и многие предложили мне пойти на события!
Как я могу создать событие в usercontrol и поймать его на главной странице?
Ответ 1
Проверьте событие Bubbling - http://msdn.microsoft.com/en-us/library/aa719644%28vs.71%29.aspx
Изменить, чтобы добавить быстрый пример: (и дополнительное редактирование для улучшения форматирования)
Пользовательский контроль
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());
}
Главная страница/Форма
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
}
Ответ 2
Просто добавьте событие в свой контроль:
public event EventHandler SomethingHappened;
и поднимите его, если хотите уведомить родителя:
if(SomethingHappened != null) SomethingHappened(this, new EventArgs);
Если вам нужны специальные EventArgs, попробуйте EventHandler<T>
вместо T
beeing типа, полученного из EventArgs
.
Ответ 3
Или, если вы ищете более развязанное решение, вы можете использовать модель издателя/подписчика мессенджера, такую как MVVM Light Messenger здесь