【问题标题】:How do I raise an event in a usercontrol and catch it in mainpage?如何在用户控件中引发事件并在主页中捕获它?
【发布时间】:2020-12-28 16:33:19
【问题描述】:

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

【问题讨论】:

    标签: c# silverlight events user-controls raiseevent


    【解决方案1】:

    查看事件冒泡 -- 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
    }
    

    【讨论】:

    • 而不是`this.USERCONTROL.StatusUpdated += new EventHandler(MyEventHandlerFunction_StatusUpdated);`你可以写USERCONTROL.StatusUpdated += MyEventHandlerFunction_StatusUpdated。节省您的打字和屏幕空间,尤其是在处理通用事件 arg 类型时。
    • 酷,我不知道。 Visual 的“TAB”自动补全默认添加整行。
    • 您可以将 FunctionThatRaisesEvent() 的主体简化为:StatusUpdated ?.Invoke(new object(), new EventArgs());
    • 我可以这样发送我自己的论点吗?
    • sender 和 eventArgs 可以设置为您想要的任何内容,并且可以通过它们。代替用户控件中的“new object()”,传入您想要的任何对象,然后将其转换为 Main 事件处理程序。
    【解决方案2】:

    只需在您的控件中添加一个事件:

    public event EventHandler SomethingHappened;
    

    当你想通知父母时提出它:

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

    如果您需要自定义 EventArgs,请尝试使用 EventHandler<T> 而不是 T 是从 EventArgs 派生的类型。

    【讨论】:

      【解决方案3】:

      或者,如果您正在寻找更解耦的解决方案,您可以使用 Messenger 发布者/订阅者模型,例如 MVVM Light Messenger here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多