winform控件有个属性DataBindings,以前从来没有用过,从网上看到只需要设置这个属性就能轻松实现数据绑定。代码如下:
private void Form1_Load(object sender, EventArgs e)
{
textBox1.DataBindings.Add("Text", tt, "Name");
label1.DataBindings.Add("Text", tt, "Name");
textBox2.DataBindings.Add("Text", tt, "Age");
label2.DataBindings.Add("Text", tt, "Age");
}
运行效果如下:
在姓名后面输入文字,在数据验证事件完成后,viewmode数据同步更新,绑定lable后,lable就能自动更新内容。
当然要想实现上面的功能,还需要自定义viewmode类。
public class V_test:V_Base
{
public string Name {
get => GetProperty<string>();
set => SetProperty(value); }
public int Age
{
get => GetProperty<int>();
set => SetProperty(value);
}
}
这样就实现了一个简单的viewmode类,简不简单?优不优雅?
附上基类的实现
/// <summary>
/// 多少会影响一点性能,大数据处理慎重使用
/// </summary>
public class V_Base : INotifyPropertyChanged
{
private Dictionary<string,object> ppts=new Dictionary<string,object>();
public void DoNotify([CallerMemberName] string propName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
// protected PropertyChangedEventHandler PropertyChangedHandler => this.PropertyChanged;
public event PropertyChangedEventHandler PropertyChanged;
protected T GetProperty<T>([CallerMemberName] string propName = "")
{
T re=default(T);
if (ppts.ContainsKey(propName))
{
re= (T)ppts[propName];
}
return re;
}
protected void SetProperty(object value,[CallerMemberName] string propName = "")
{
if (ppts.ContainsKey(propName))
{
ppts[propName] = value;
}
else
{
ppts.Add(propName, value);
}
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
}