我已经实例化了一个类'my_font_size',它有一个访问者'Size_Points',我试图绑定几个控件。
这就是我正在尝试的:
textBox1.DataBindings.Add("Font.Size", my_font_size, "Size_Points", false, DataSourceUpdateMode.OnPropertyChanged);
但是我得到了一个Argument.Exception,
Cannot bind to the property 'Font.Size' on the target control.
如何深入了解该物业?
答案 0 :(得分:2)
Binding
中的{p> winforms
不支持嵌套路径,您必须绑定Font
属性并使用一些Format
事件处理程序来控制绑定,如下所示:
Binding bind = new Binding("Font", my_font_size, "Size_Points");
bind.Format += (s,e) => {
var b = s as Binding;
var currentFont = b.Control.Font;
e.Value = new Font(currentFont.FontFamily,
(float) e.Value, currentFont.Style);
};
textBox1.DataBindings.Add(bind);
但是我怀疑你的班级my_font_size
没有足够的条件让Binding
工作。以下是如何通过遵循模式来通知某些属性的更改:
public class my_font_size {
float size_Points;
public float Size_Points {
get { return size_Points;}
set {
if(size_Points != value){
size_Points = value;
OnSize_PointsChanged(EventArgs.Empty);
}
}
}
public event EventHandler Size_PointsChanged;
protected virtual void OnSize_PointsChanged(EventArgs e){
var handler = Size_PointsChanged;
if(handler != null){
handler(this, e);
}
}
}
你也可以使用INotifyPropertyChanged
,但我让那部分让你搜索更多。
答案 1 :(得分:1)
您需要将my_font_size
改为Font
并绑定到Font
的{{1}}。 TextBox
类是不可变的,必须全局绑定。