为什么Winforms.Button.Text适用于DataBinding但不适用于ImageKey?

时间:2009-10-27 23:22:25

标签: c# .net winforms data-binding

有谁知道这个?

上周我一直在尝试这个,但没有运气。

现在我可以看到一次可以成功绑定到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 );
    }
}

它仍然不起作用。网上是否有教程或其他内容,显示了这一点。它对我不起作用。

2 个答案:

答案 0 :(得分:3)

  

...不会更改绑定数据

对于双向绑定,您需要通知事件 - 这可以采用两种常见形式:

  • 一个public event EventHandler {name}Changed;,其中{name}是绑定属性(例如ImageKeyChanged
  • 该对象可以实现INotifyPropertyChanged

这当然是对象到控件绑定的工作原理;我非常确定控制到对象的检测非常相似。请注意,有TextChanged个事件,但没有ImageKeyChanged个事件。

答案 1 :(得分:2)

要使绑定生效,具有要绑定的属性的类需要提供更改事件(例如TextChanged属性的Text)或实现INotifyPropertyChanged。由于Button类不提供ImageKeyChanged事件,因此绑定无法订阅以获得更改通知。