【发布时间】:2020-12-28 16:33:19
【问题描述】:
我有一个UserControl,我需要通知父页面UserControl 中的一个按钮被点击。如何在UserControl 中提出事件并在主页上捕获它?我尝试使用static,很多人建议我参加活动。
【问题讨论】:
标签: c# silverlight events user-controls raiseevent
我有一个UserControl,我需要通知父页面UserControl 中的一个按钮被点击。如何在UserControl 中提出事件并在主页上捕获它?我尝试使用static,很多人建议我参加活动。
【问题讨论】:
标签: c# silverlight events user-controls raiseevent
查看事件冒泡 -- 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
}
【讨论】:
USERCONTROL.StatusUpdated += MyEventHandlerFunction_StatusUpdated。节省您的打字和屏幕空间,尤其是在处理通用事件 arg 类型时。
StatusUpdated ?.Invoke(new object(), new EventArgs());
只需在您的控件中添加一个事件:
public event EventHandler SomethingHappened;
当你想通知父母时提出它:
if(SomethingHappened != null) SomethingHappened(this, new EventArgs);
如果您需要自定义 EventArgs,请尝试使用 EventHandler<T> 而不是 T 是从 EventArgs 派生的类型。
【讨论】:
或者,如果您正在寻找更解耦的解决方案,您可以使用 Messenger 发布者/订阅者模型,例如 MVVM Light Messenger here
【讨论】: