Как вызвать событие в usercontrol и поймать его в mainpage?

у меня есть UserControl, и мне нужно уведомить родительскую страницу, что кнопка в . Как я могу поднять событие в UserControl и поймать его на главной странице? Я пробовал использовать static, и многие предложили мне пойти на мероприятия!

3 ответов


Проверьте событие пузырясь -- http://msdn.microsoft.com/en-us/library/aa719644%28vs.71%29.aspx

Edit, чтобы добавить быстрый пример: (и дополнительное редактирование для улучшения форматирования)

Контроль Пользователей

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
}

просто добавьте событие в свой элемент управления:

public event EventHandler SomethingHappened;

и поднять его, когда вы хотите уведомить родителя:

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

Если вам нужны пользовательские EventArgs попробуйте EventHandler<T> вместо с T быть типом, производным от EventArgs.


или если вы ищете более развязанное решение, вы можете использовать модель издателя / подписчика messenger, такую как MVVM Light Messenger здесь