2016-07-03 177 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 
    } 
}