我有UserControl
,我需要通知父页面点击了UserControl
中的按钮。如何在UserControl
中引发事件并在主页面上捕获它?我尝试使用static
,很多人建议我去参加活动!
答案 0 :(得分:86)
查看事件冒泡 - 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
}
答案 1 :(得分:7)
只需在您的控件中添加一个事件:
public event EventHandler SomethingHappened;
并在您想要通知父母时提出它:
if(SomethingHappened != null) SomethingHappened(this, new EventArgs);
如果您需要自定义EventArgs,请尝试EventHandler<T>
,而T
使用EventArgs
派生的类型。
答案 2 :(得分:1)
或者,如果您正在寻找更加分离的解决方案,您可以使用信使发布者/订阅者模型,例如MVVM Light Messenger here