【发布时间】:2016-05-02 18:37:53
【问题描述】:
我有一个自定义控件,它有一个支持双向绑定的Value 属性和一个ValueChanged 事件:
public event EventHandler ValueChanged;
[Bindable(BindableSupport.Yes, BindingDirection.TwoWay)]
public virtual MyObject Value
{
get { return this.value; }
set
{
this.value = value;
OnValueChanged(new EventArgs());
}
}
private void OnValueChanged(EventArgs e)
{
EventHandler handler = ValueChanged;
if (handler != null)
handler(this, e);
}
当放置在表单和设计器中设置的数据绑定上时,此控件可以正常工作。绑定源正确订阅事件,并且底层数据源得到相应更新。
现在,我正在通过执行以下操作动态创建控件:
MyControl ctl = new MyControl();
ctl.DataBindings.Add(new Binding("Value", this.bindingSource, "SomeField", true, DataSourceUpdateMode.OnPropertyChanged));
但是,通过这样做,绑定源不会订阅ValueChanged 事件。我检查了设计器生成的代码,并没有使 bindingsource 注册到事件。我认为将绑定添加到数据绑定应该这样做,但事实并非如此。
这里可能缺少什么?
【问题讨论】:
标签: c# winforms data-binding bindingsource