题
我有以下课程
public class Car { public Name {get; set;} }
我希望以编程方式将其绑定到文本框。
我该怎么做?
在黑暗中拍摄:
... Car car = new Car(); TextEdit editBox = new TextEdit(); editBox.DataBinding.Add("Name", car, "Car - Name"); ...
我收到以下错误
"无法绑定到目标控件上的属性'Name'。
我做错了什么,我应该怎么做?我发现来自网络开发的数据绑定概念有点难以理解。
解决方案
你想要
editBox.DataBindings.Add("Text", car, "Name");
第一个参数是控件上要进行数据绑定的属性的名称,第二个参数是数据源,第三个参数是要绑定到的数据源上的属性。
其他提示
不看语法,我很确定它是:
editBox.DataBinding.Add("Text", car, "Name");
editBox.DataBinding.Add("Text", car, "Name");
第一个arg是控件属性的名称,第二个是要绑定的对象,最后一个是要用作数据源的对象属性的名称。
您非常接近数据绑定行
editBox.DataBinding.Add("Text", car, "Name");
第一个参数是您的editbox对象的属性,它将是数据绑定的。第二个参数是您要绑定的数据源,最后一个参数是您要绑定到的数据源上的属性。
请记住,数据绑定是一种方式,因此如果您更改编辑框,则汽车对象会更新,但如果您直接更改汽车名称,则不会更新编辑框。
尝试:
editBox.DataBinding.Add( "Text", car", "Name" );
我相信
editBox.DataBindings.Add(new Binding(" Text",car," Name"));
应该做的伎俩。没试过,但我认为这就是主意。
您正在尝试绑定到“名称” TextEdit控件。该名称用于以编程方式访问控件,不能绑定。您应该绑定控件的文本。
以下是可用作属性的泛型类,并实现绑定控件使用的INotifyPropertyChanged以捕获属性值中的更改。
public class NotifyValue<datatype> : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
datatype _value;
public datatype Value
{
get
{
return _value;
}
set
{
_value = value;
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Value"));
}
}
}
可以这样声明:
public NotifyValue<int> myInteger = new NotifyValue<int>();
并分配到像这样的文本框
Textbox1.DataBindings.Add(
"Text",
this,
"myInteger.Value",
false,
DataSourceUpdateMode.OnPropertyChanged
);
.. where“Text”是文本框的属性,'this'是当前的Form实例。
类不必继承INotifyPropertyChanged类。声明类型为System.ComponentModel.PropertyChangedEventHandler的事件后,控件数据透视器将订阅类更改事件
使用C#4.6语法:
editBox.DataBinding.Add(nameof(editBox.Text), car, nameof(car.Name));
如果car为null,那么上面的代码将以比使用文字字符串代表 car
的 datamember
更显着的方式失败
它是
this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));