为什么Winforms.Button.Text适用于DataBinding但不适用于ImageKey?
有没有人知道这个?
我上周一直在尝试这个,没有运气。
现在我可以看到,一旦成功绑定到Button的Text属性,而不是它的ImageKey属性:
myButton.Text = "new text"; // really changes the bound data myButton.ImageKey = "new text"; // does NOT change the bound data
我用:
myButton.DataBindings.Add ( new Binding ( "ImageKey", this.MyData, "Name", true, DataSourceUpdateMode.OnPropertyChanged ) );
为什么? 是什么让Binding打勾/工作? 我只是不明白。
编辑:
好的,所以我为自己的派生控件定义了这些:
public event EventHandler ImageKeyChanged; protected virtual void OnImageKeyChanged ( EventArgs e ) { if ( ImageKeyChanged!= null ) { ImageKeyChanged ( this, e ); } } [Bindable ( true )] public new string ImageKey { get { return base.ImageKey; } set { base.ImageKey = value; this.OnImageKeyChanged ( EventArgs.Empty ); } }
它仍然无法正常工作。 网上是否有教程或其他内容,显示了这一点。 它对我不起作用。
…不会更改绑定数据
对于双向绑定,您需要通知事件 – 这可以采用两种常见forms:
-
public event EventHandler {name}Changed;
,其中{name}
是绑定属性(例如ImageKeyChanged
) - 该对象可以实现
INotifyPropertyChanged
这当然是对象到控件绑定的工作原理; 我很确定控制到对象检测非常相似。 请注意,有一个TextChanged
事件,但没有ImageKeyChanged
事件。
要使绑定生效,具有要绑定的属性的类需要提供更改事件(例如Text
属性的TextChanged
)或实现INotifyPropertyChanged
。 由于Button
类不提供ImageKeyChanged
事件,因此绑定无法订阅以获得更改通知。