【问题标题】:Why Winforms.Button.Text works for DataBinding but not ImageKey?为什么 Winforms.Button.Text 适用于 DataBinding 而不适用于 ImageKey?
【发布时间】:2009-10-27 23:22:24
【问题描述】:

有人知道吗?

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

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

为什么?是什么使绑定滴答/工作?我就是不明白。

编辑:

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

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 );
    }
}

还是不行。网上有没有教程之类的,可以说明这一点。它只是对我不起作用。

【问题讨论】:

    标签: c# .net winforms data-binding


    【解决方案1】:

    ...不改变绑定的数据

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

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

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

    【讨论】:

    • 谢谢马克。我实现了该事件,并且还为之前绑定的对象设置了 INotifyPropertyChanged。但还是一样。我一定是错过了什么。
    • 实际上我认为它有效。我总是在一天结束时有这个,会检查另一个属性。
    • 好吧,我添加的 ImageKey 之外的另一个属性似乎不起作用。你知道为什么会这样吗?因此,我将 ImageKey 绑定到 Name,并且在我进行更改后它起作用了。但是现在我为另一个属性写了完全相同的代码(没有 new,因为这个属性在基础中不存在),但是现在相同的绑定数据属性没有改变。
    • 没关系,我想我已经得到了这些建议。抱歉,这是我的错,但是是你和 Lucero 的回复帮助了我。
    【解决方案2】:

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

    【讨论】:

    • 谢谢 Lucero,我想我搞定了。谢谢你和马克。我想接受这两个答案。
    猜你喜欢
    • 2019-02-16
    • 1970-01-01
    • 2021-04-08
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多