2016-07-03 128 views
0

我的用户控件有一个私人的结合来源:自定义事件在用户控件

private System.Windows.Forms.BindingSource _bsMyBindingSource; 

绑定源对象支持列表更改事件,而这正是我要赶,并使用该事件。

private void _bsMyBindingSource_ListChanged(object sender, ListChangedEventArgs e) 
     { 

     } 

现在...因为_bsMyBindingSource是一个私有成员,我不想直接揭露此事件(如果这甚至有可能?)。

我希望我的用户控件有一个OnChange事件,当调用内部_bsMyBindingSource_ListChanged时会调用它。

这怎么办?

+0

用户控件只是订阅BS上的ListChanged事件? – Plutonix

回答

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 
    } 
}