代码之家  ›  专栏  ›  技术社区  ›  Joan Venge

为什么winforms.button.text适用于数据绑定而不是imagekey?

  •  2
  • Joan Venge  · 技术社区  · 15 年前

    有人知道吗?

    我上个星期一直在尝试这个,没有运气。

    现在我可以看到,一次可以成功绑定到按钮的文本属性,但不能绑定到它的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 ) );
    

    为什么?是什么使绑定起作用的?我就是不明白。

    编辑:

    好吧,我为自己的派生控件定义了这些:

    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 回复  |  直到 15 年前
        1
  •  3
  •   Marc Gravell    15 年前

    …不更改绑定数据

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

    • public event EventHandler {name}Changed; 在哪里 {name} 是绑定属性( ImageKeyChanged 例如)
    • 对象可以实现 INotifyPropertyChanged

    这当然就是对象到控制绑定的工作方式;我非常确定控制到对象检测是非常相似的。注意有一个 TextChanged 事件,但没有 图像密钥更改 事件。

        2
  •  2
  •   Lucero    15 年前

    要使绑定工作,具有要绑定属性的类需要提供更改事件( TextChanged 对于 Text 属性)或实现 INotifyPropertyChanged . 自从 Button 类不提供 ImageKeyChanged 事件,绑定无法订阅以获取更改通知。