我的用户控件有一个私有绑定源:
private System.Windows.Forms.BindingSource _bsMyBindingSource;
绑定源对象支持List更改事件,这正是我想要捕获和使用的事件。
private void _bsMyBindingSource_ListChanged(object sender, ListChangedEventArgs e)
{
}
现在......因为_bsMyBindingSource是私有成员,所以我不想直接公开这个事件(如果可能的话?)。
我希望我的用户控件具有OnChange事件,该事件将在调用内部_bsMyBindingSource_ListChanged时调用。
如何做到这一点?
答案 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
}
}