如何在用户控件中引发事件并在主页中捕获它?

时间:2011-05-31 19:49:21

标签: c# silverlight events user-controls raiseevent

我有UserControl,我需要通知父页面点击了UserControl中的按钮。如何在UserControl中引发事件并在主页面上捕获它?我尝试使用static,很多人建议我去参加活动!

3 个答案:

答案 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