Winform使用DataBinding实现数据绑定
程序员文章站
2022-06-08 16:29:12
...
有的项目界面多个地方使用到模型的同一个属性,不使用数据绑定功能时,每当添加或修改一些功能时,都要手动赋值更新界面,总是担心哪里漏掉没有更新。
使用DataBinding可以实现自动绑定,当模型数据改变时,界面上绑定了模型属性的控件将自动更新,不需要手动一一赋值。
代码如***意代码中用的是Form2不是Form1):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.CompilerServices;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
Test test;
private void Form2_Load(object sender, EventArgs e)
{
test=new Test();
label1.DataBindings.Add("Text", test, "Str");
label2.DataBindings.Add("Text", test, "Str");
label3.DataBindings.Add("Text", test, "Str");
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
test.Str = textBox1.Text;
}
}
//要使用绑定数据功能,需要模型支持INotifyPropertyChanged接口
public class Test : INotifyPropertyChanged
{
string _str;
public string Str
{
get
{
return _str;
}
set
{
_str = value;
FireStrChanged();
}
}
//必须实现INotifyPropertyChanged接口的此事件
public event PropertyChangedEventHandler PropertyChanged;
//要在.net4.0使用CallerMemberName特性,需要加上后面一段代码
public void FireStrChanged([CallerMemberName] string propertyName="")
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public class CallerMemberNameAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public class CallerFilePathAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public class CallerLineNumberAttribute : Attribute
{
}
}
实现效果: