程序目标: 控件的属性值与对象的属性值双向绑定使窗口控件的属性值与对象的属性值保持一致。对窗口控件属性值更改后立即更新对象的属性值,对对象的属性值更改后立即更新窗口控件的属性值。

程序完整代码包: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 双向数据绑定的更多相关文章

  1. .net WinForm 的数据绑定

    .net WinForm 的数据绑定相当灵活 http://www.cnblogs.com/ydong/archive/2006/04/22/381847.html 原来只知道 Control 类上的 ...

  2. vue双向数据绑定原理探究(附demo)

    昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...

  3. 双向数据绑定(angular,vue)

    最近github上插件项目更新了关于双向数据绑定的实现方式,关于angular和vue. angular众所周知是使用的脏检查($dirty).一开始大家会认为angular开启了类似setInter ...

  4. jQuery.my – 实时的复杂的双向数据绑定

    jQuery.my 这个插件用于实时双向数据绑定.它发生变异给出的数据源对象,反映了用户与用户界面之间的相互作用.jQuery.my 提供了全面的验证,条件格式,复杂的依赖关系,运行形式结构操作. 马 ...

  5. Angular双向数据绑定MVVM以及基本模式分析

    MVVM: angular的MVVM实现的是双向数据绑定,模型从服务器端抓取到数据,将数据通过控制器(controller)传递到视图(view)显示,视图数据发生变化时同样也会影响到模型数据的变化, ...

  6. 《AngularJS权威教程》中关于指令双向数据绑定的理解

    在<AngularJS权威教程>中,自定义指令和DOM双向数据绑定有一个在线demo,网址:http://jsbin.com/IteNita/1/edit?html,js,output,具 ...

  7. Angular解决双向数据绑定

    <!DOCTYPE html> <html ng-app="myApp1"><body><div ng-controller=" ...

  8. AngularJS入门心得2——何为双向数据绑定

    前言:谁说Test工作比较轻松,最近在熟悉几个case,差点没疯.最近又是断断续续的看我的AngularJS,总觉得自己还是没有入门,可能是自己欠前端的东西太多了,看不了几行代码就有几个常用函数不熟悉 ...

  9. angularJs:双向数据绑定

    示例1 <!DOCTYPE html> <html ng-app> <head> <meta charset="UTF-8" /> ...

随机推荐

  1. Genymotion Android模拟器Genymotion的安装和使用

    Android模拟器Genymotion的安装和使用 by:授客 QQ:1033553122 环境: Win7 Genymotion 2.12.0 下载地址:http://download.canad ...

  2. 2018-08-20 中文代码之Spring Boot集成H2内存数据库

    续前文: 中文代码之Spring Boot添加基本日志, 源码库地址相同. 鉴于此项目中的数据总量不大(即使万条词条也在1MB之内), 当前选择轻量级而且配置简单易于部署的H2内存数据库比较合理. 此 ...

  3. 《SQL CookBook 》笔记-准备工作

    目录 准备 1.建立员工表--EMP 2.建立部门表--DEPT 3.EMP表和DEPT表插入数据 4.建立透视表T1,并插入数据 5.建立透视表T10,并插入数据 第二章 shanzm 准备 1.建 ...

  4. WinServer设置多用户登录

    1.运行 gpedit.msc →computer configuration→administrative templates→windows componets→Remote Desktop→Re ...

  5. python进程和线程(六)

    协程 协程,又称微线程,纤程.英文名Coroutine.顾名思义,协程是协作式的,也就是非抢占式的程序(线程是抢占式的).协程的关键字是yield,一看到这个就想到了生成器对不对?那就顺便回顾一下生成 ...

  6. springboot集合jpa使用

    现目前java中用较多的数据库操作框架主要有:ibatis,mybatis,hibernate:今天分享的是jpa框架,在springboot框架中能够很快并方便的使用它,就我个人而言觉得如果是做业务 ...

  7. Python基础(数字,字符串方法)

    数字: #二进制转十进制 a=' v=int(a,base=2) print(v) 进制转换 #当前数字的二进制至少有多少位 b=2 v2=b.bit_length() print(v2) 数值二进制 ...

  8. 【朝花夕拾】四大组件之(二)Service篇

    一.Service是什么 对于这个问题,想必大家都能说出一二,如“它是四大组件之一”.“在后台处理一些操作”等.咱们这里看看官方文档中的描述,官方语言一般都是准确且言简意赅的,这里可以体验一下其风格. ...

  9. 【Android Studio安装部署系列】一、JDK开发环境搭建

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio安装后自带jre,这个自带jre的版本号肯定比最新的版本号要小. 但是如果项目中没有用到新版本jdk的特 ...

  10. TabLayoutBottomDemo【TabLayout实现底部选项卡】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用TabLayout实现底部选项卡切换功能. 效果图 代码分析 1.演示固定模式的展现 2.演示自定义布局的实现 使用步骤 一.项 ...