WinForm 双向数据绑定
程序目标: 控件的属性值与对象的属性值双向绑定使窗口控件的属性值与对象的属性值保持一致。对窗口控件属性值更改后立即更新对象的属性值,对对象的属性值更改后立即更新窗口控件的属性值。
程序完整代码包:https://pan.baidu.com/s/1JPX0BJDNiEoczYE9xXL1ow
主要代码:
定义控件属性要绑定对象的类:Person
using System.ComponentModel; namespace TempTest
{
/// <summary>
/// 要实现双向绑定需要继承System.ComponentModel.INotifyPropertyChange接口。若不继承此接口则只能单向绑定,对对象属性值的更改不会通知控件更新。
/// </summary>
class Person : INotifyPropertyChanged
{
#region 属性
public string Name { get => mName; set { mName = value; SendChangeInfo("Name"); } }
public string Address { get => mAddress; set { mAddress = value;SendChangeInfo("Address"); } }
public int Age { get => mAge; set { mAge = value; SendChangeInfo("Age"); } }
#endregion private string mName;
private string mAddress;
private int mAge; /// <summary>
/// 属性改变后需要调用的方法,触发PropertyChanged事件。
/// </summary>
/// <param name="propertyName">属性名</param>
private void SendChangeInfo(string propertyName)
{
if (this.PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
} /// <summary>
/// 实现的接口。
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
}
}
Form:
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace TempTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Person User;
private void Form1_Load(object sender, EventArgs e)
{
//创建对象初始化属性
User = new Person()
{
Name = "ABC",
Address = "中国 湖南",
Age =
}; //绑定数据
textBoxName.DataBindings.Add("Text", User, "Name");
textBoxAddress.DataBindings.Add("Text", User, "Address");
textBoxAge.DataBindings.Add("Text", User, "Age");
} /// <summary>
/// 通过另外3个textBox改变对象属性值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonChangeValue_Click(object sender, EventArgs e)
{
User.Name = textBoxName2.Text;
User.Address = textBoxAddress2.Text;
int age;
int.TryParse(textBoxAge2.Text, out age);
User.Age = age;
// textBoxName,textBoxAddress,textBoxAge的Text会自动更新
} /// <summary>
/// Debug输出对象属性值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonShow_Click(object sender, EventArgs e)
{
Debug.WriteLine($"{User.Name},{User.Address},{User.Age}");
}
}
}
WinForm 双向数据绑定的更多相关文章
- .net WinForm 的数据绑定
.net WinForm 的数据绑定相当灵活 http://www.cnblogs.com/ydong/archive/2006/04/22/381847.html 原来只知道 Control 类上的 ...
- vue双向数据绑定原理探究(附demo)
昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...
- 双向数据绑定(angular,vue)
最近github上插件项目更新了关于双向数据绑定的实现方式,关于angular和vue. angular众所周知是使用的脏检查($dirty).一开始大家会认为angular开启了类似setInter ...
- jQuery.my – 实时的复杂的双向数据绑定
jQuery.my 这个插件用于实时双向数据绑定.它发生变异给出的数据源对象,反映了用户与用户界面之间的相互作用.jQuery.my 提供了全面的验证,条件格式,复杂的依赖关系,运行形式结构操作. 马 ...
- Angular双向数据绑定MVVM以及基本模式分析
MVVM: angular的MVVM实现的是双向数据绑定,模型从服务器端抓取到数据,将数据通过控制器(controller)传递到视图(view)显示,视图数据发生变化时同样也会影响到模型数据的变化, ...
- 《AngularJS权威教程》中关于指令双向数据绑定的理解
在<AngularJS权威教程>中,自定义指令和DOM双向数据绑定有一个在线demo,网址:http://jsbin.com/IteNita/1/edit?html,js,output,具 ...
- Angular解决双向数据绑定
<!DOCTYPE html> <html ng-app="myApp1"><body><div ng-controller=" ...
- AngularJS入门心得2——何为双向数据绑定
前言:谁说Test工作比较轻松,最近在熟悉几个case,差点没疯.最近又是断断续续的看我的AngularJS,总觉得自己还是没有入门,可能是自己欠前端的东西太多了,看不了几行代码就有几个常用函数不熟悉 ...
- angularJs:双向数据绑定
示例1 <!DOCTYPE html> <html ng-app> <head> <meta charset="UTF-8" /> ...
随机推荐
- cmd提取时间格式(小时)问题以及Windows系统语言判断
你在这里看到了我的现在的时间是01:15,没错正在做个开发,本来好好的,结果一运行,直接报错: 这里就是时间中的获取小时出了问题,之前23点那会已经调试通过了,过那时是没有问题的,那么这时发生了什么? ...
- gitbash安装与使用
1. 下载安装git (windows版) 网址:https://git-scm.com/download/win 点击for windows版本->下载 2. 点击exe文件安装,安装完成后打 ...
- AI应用开发实战 - 从零开始搭建macOS开发环境
AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问:https://www.bilibili.com/video/av24368929/ 建议和反馈,请发送到 https ...
- 零基础java的福音!史上最全最精简的学习路线图!
这是一个java系统学习路线,从零基础到项目框架开发,每一个阶段里面内容都标记的很清楚,如果你现在也在学习java,你可以跟着这个系统学习路线学,学完自己可以独立的完成项目框架开发,二线城市拿个7k+ ...
- 最短路问题之Dijkstra算法
题目: 在上一篇博客的基础上,这是另一种方法求最短路径的问题. Dijkstra(迪杰斯特拉)算法:找到最短距离已经确定的点,从它出发更新相邻顶点的最短距离.此后不再关心前面已经确定的“最短距离已经确 ...
- MySQL学习(二)索引与锁 --- 2019年1月
1.Order By 是怎么工作的 MySQL做排序是一个成本比较高的操作.MySQL会为每个线程分配一个 sort_buffer 内存用于排序,该内存大小为 sort_buffer_size. 全字 ...
- C语言ftell()函数
ftell()函数返回指定流的当前文件指针的位置.在文件末尾移动文件指针后,我们可以使用ftell()函数获取文件的总大小.可以使用SEEK_END常量来将文件指针移动文件末尾. ftell()函 ...
- 10个小技巧助您写出高性能的ASP.NET Core代码
今天这篇文章我们来聊一聊如何提升并优化ASP.NET Core应用程序的性能,本文的大部分内容来自翻译,当然中间穿插着自己的理解,希望对大家有所帮助!话不多说开始今天的主题吧! 我们都知道性能是公共网 ...
- 【Netty】(4)—源码AbstractBootstrap
源码AbstractBootstrap 一.概念 AbstractBootstrap是一个工具类,用于服务器通道的一系列配置,绑定NioEventLoopGroup线程组,指定指定NIO的模式,指定子 ...
- TabLayoutBottomDemo【TabLayout实现底部选项卡】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用TabLayout实现底部选项卡切换功能. 效果图 代码分析 1.演示固定模式的展现 2.演示自定义布局的实现 使用步骤 一.项 ...