用户控件中的自定义事件

时间:2016-07-03 15:36:56

标签: c#

我的用户控件有一个私有绑定源:

private System.Windows.Forms.BindingSource _bsMyBindingSource;

绑定源对象支持List更改事件,这正是我想要捕获和使用的事件。

private void _bsMyBindingSource_ListChanged(object sender, ListChangedEventArgs e)
      {

      }

现在......因为_bsMyBindingSource是私有成员,所以我不想直接公开这个事件(如果可能的话?)。

我希望我的用户控件具有OnChange事件,该事件将在调用内部_bsMyBindingSource_ListChanged时调用。

如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您只需要从_bsMyBindingSource_ListChanged处理程序中提升自定义事件。

您可以将其保留为ListChangedEventHandler

public class MyUserControl : UserControl
{
    public event ListChangedEventHandler OnChange;

    private void _bsMyBindingSource_ListChanged(object sender, ListChangedEventArgs e)
    {
        // if no listeners, OnChange will be null, so need to check
        if(this.OnChange != null)
        {
            this.OnChange(this, e);
        }
    }
}

或者执行自定义事件类型:

public class MyUserControl : UserControl
{
    public event EventHandler OnChange;

    private void _bsMyBindingSource_ListChanged(object sender, ListChangedEventArgs e)
    {
        // if no listeners, OnChange will be null, so need to check
        if(this.OnChange != null)
        {
            this.OnChange(this, new EventArgs());
        }
    }
}

然后您的页面或其他任何内容都可以收听此活动:

public class MyPage : Page
{
    private MyUserControl myControl;

    public void MyPage_Load()
    {
        myControl.OnChange += myControl_OnChange;
    }

    private void myControl_OnChange(object sender, ListChangedEventArgs e)
    {
        // ... do something
    }
}