如何在可绑定的Winforms控件上设置自定义属性?

3

我有一些属性,如OverlayColor等,我想将其绑定到不同类型的实例上,但绑定的数据却没有改变。

我使用了以下代码:

[Bindable ( true )]
public Color OverlayColor { get; set; }

UI会发生改变,但绑定的数据不会改变。绑定数据的属性名称是Color。

你是否在这里重新提出了这个问题 - http://stackoverflow.com/questions/1634265/why-winforms-button-text-works-for-databinding-but-not-imagekey? - ChrisF
它们很相似,但我在想属性方面的问题。但总体而言,它们都是关于让绑定工作的。 - Joan Venge
可能值得将这些问题链接起来,但要指出它们的不同之处,以免此问题被关闭为重复。 - ChrisF
你是对的,下次会注意。 - Joan Venge
1个回答

6

我理解 Bindable 属性是为了将属性添加到当前控件的 (DataBindings) 下。

要解决你所遇到的 OverlayColor 在绑定时没有被更新的问题,你必须在你要绑定的对象上实现 INotifyPropertyChanged 接口。当绑定对象发生更改时,你必须触发 NotifyPropertyChanged 事件。

在下面的示例中,我创建了一个 Data 类,用它来绑定并调用 ChangeColor() 方法来改变颜色。

public class Data : INotifyPropertyChanged
{
  Color overlayColor = Color.Teal;

  public event PropertyChangedEventHandler PropertyChanged;

  public Data()
  {
  }

  public Color OverlayColor
  {
    get
    {
      return overlayColor;
    }
    set
    {
      overlayColor = value;
      NotifyPropertyChanged( "OverlayColor" );
    }
  }

  public void ChangeColor()
  {
    if ( OverlayColor != Color.Tomato )
      OverlayColor = Color.Tomato;
    else
      OverlayColor = Color.DarkCyan;
  }

  private void NotifyPropertyChanged( string propertyName )
  {
    if ( PropertyChanged != null )
      PropertyChanged( this, new PropertyChangedEventArgs( propertyName ) );
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接