如何将元素相互绑定
本文关键字:绑定 元素 | 更新日期: 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
添加到控件中,并自己接管Width
和Height
属性。
使用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