如何将元素相互绑定

本文关键字:绑定 元素 | 更新日期: 2023-09-27 18:20:50

我有Control,其中我用"DataBindings"绑定了自己的类Element。如果我更改"宽度"answers"高度",例如在"E"中,Control也会更改相同的属性。但另一方面它不起作用。

this.DataBindings.Add("Width", E, "Width");
this.DataBindings.Add("Height", E, "Height");

修复它的最佳方法是什么?只有手,问题是有很多财产?或者存在类似"DataBindings"的内容?

p.S.Element不是从任何类继承的,他没有"DataBindings"。谢谢

如何将元素相互绑定

要使其双向工作,必须存在以下内容:

  • 两个Proerties都必须是依赖属性,或者包含类必须实现INotifyPropertyChanged
  • 绑定的Mode必须是TwoWay

编辑:刚刚看到你在使用WinForms-我不介意它在那里以同样的方式工作!

您应该在类E中为要绑定的每个属性实现INotifyPropertyChanged

换个方式是行不通的。对于需要更新数据源的每个属性,Control必须具有*Changed事件。对于您的示例,您可以尝试使用控件的Size属性,因为存在SizeChanged事件。

我不认为控件会向数据绑定侦听器报告宽度和高度属性的更改。

尝试将INotifyPropertyChanged添加到控件中,并自己接管WidthHeight属性。

使用Panel控件的示例:

public class PanelEx : Panel, INotifyPropertyChanged {
  public event PropertyChangedEventHandler PropertyChanged;
  public new int Width {
    get { return base.Width; }
    set {
      base.Width = value;
      OnPropertyChanged("Width");
    }
  }
  public new int Height {
    get { return base.Height; }
    set {
      base.Height = value;
      OnPropertyChanged("Height");
    }
  }
  private void OnPropertyChanged(string propertyName) {
    if (PropertyChanged != null)
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  }
}

然后将您的数据绑定调用更改为此,其中this是您对上述实现的控制:

this.DataBindings.Add("Width", E, "Width", false, DataSourceUpdateMode.OnPropertyChanged);
this.DataBindings.Add("Height", E, "Height", false, DataSourceUpdateMode.OnPropertyChanged);

在添加绑定时,请使用其中一个重载,该重载允许您设置DataSourceUpdateMode并将其设置为DataSourceUpdateMode.OnPropertyChanged