C# 简单数据绑定
我正在尝试做一个(非常)简单的数据绑定测试,但它并没有像我预期的那样工作。。。假设我有以下课程:C# 简单数据绑定,c#,winforms,data-binding,C#,Winforms,Data Binding,我正在尝试做一个(非常)简单的数据绑定测试,但它并没有像我预期的那样工作。。。假设我有以下课程: // this class represents some kind of data producer public class DataSourceClass { public string Data { get; set; } public DataSourceClass() { } } //this form holds t
// this class represents some kind of data producer
public class DataSourceClass
{
public string Data { get; set; }
public DataSourceClass()
{ }
}
//this form holds the TextBox control as the Data consumer
public partial class DatabindingTestForm : Form
{
public DataSourceClass ds { get; set; }
public DatabindingTestForm()
{
InitializeComponent();
ds = new DataSourceClass();
textBox.DataBindings.Add("Text", ds, "Data");
}
private void checkBox_CheckedChanged(object sender, EventArgs e)
{
if (checkBox.Checked)
ds.Data = "CHECKED";
else
ds.Data = "NOT CHECKED";
}
}
我没有添加设计器代码,但它在那里,表单包含一个TextBox对象和一个CheckBox对象。如您所知,我试图在用户选中复选框时更改Textbox文本属性。
但此代码不会更新TextBox文本属性。有人能解释一下我遗漏了什么吗?当
数据属性的值更改时,您需要某种方式通知WinForms。最直接的方法是:
- 将事件添加到
DataSourceClass
:public event EventHandler DataChanged代码>
- 使
DataSourceClass
实现INotifyPropertyChanged
。这将为您提供一个PropertyChanged
事件
无论哪种方式,你都会有一个新的活动需要举办。您需要将数据
属性从自动属性转换为具有专用字段、get
方法和set
方法的属性。一旦有了数据的显式getter和setter
属性,就可以从setter内部引发事件。您可以使用INotifyPropertyChanged
接口。我没有在IDE/编译器中运行它,因此可能存在语法错误
public class DataSourceClass : INotifyPropertyChanged
{
private string _data;
public string Data
{
get
{
return _data;
}
set
{
if( _data != value )
{
_data = value;
OnPropertyChanged( "data" );
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged( string propertyName )
{
PropertyChangedEventHandler handler = PropertyChanged;
if( handler != null )
{
handler( new PropertyChangedEventArgs( propertyName ) );
}
}
}
我有一个填充,我错过了主要的想法。。。如果仍然需要添加事件,为什么需要使用数据绑定?我可以使用事件(无需ControlBindingsCollection…)作为一个如此简单的示例,您可以使用一个事件直接更新文本框。但是,在实际的应用程序中,您希望将数据模型(您的DataSourceClass
)与用户界面(文本框)分开。数据绑定的目的是坐在模型和UI之间,在它们之间传递数据,而不需要让它们相互了解。