Winform控件数据绑定 DataBindings

news2024/9/22 17:26:56

目录

引言

 绑定的方式

        双向绑定

                验证时更改数据源

                立即更改数据源

        单向绑定

绑定方法

        属性界面选择绑定

        通过代码手动绑定

绑定自定义数据类型


引言

DataBindings 的出现显然是为了解决后台数据与前端界面的同步问题,通过绑定控件属性与对象属性,解决二者的同步问题。下图演示的是双向绑定的情景:

借助这种便利,还可自动完成数值与文本之间的自动转换。

 绑定的方式

        双向绑定

                验证时更改数据源

数据源更新模式:OnValidation

引言所演示的就是验证时更新数据源,在textbox控件失去焦点时,触发Onvalidation事件,继而更改TrackBar控件value属性。默认模式

                立即更改数据源

数据源更新模式:OnPropertyChanged

 在我修改textbox控件值时,会立即修改TrackBar控件value值

        单向绑定

数据源更新模式:Never

修改Textbox值时,TrackBar控件value属性不会更改。

绑定方法

        属性界面选择绑定

                

可绑定的属性会列在DataBindings列表下面,选择Text后,首先先添加项目数据源。我们绑定的是类对象,这里选择对象数据。

 接着选择数据对象,从自定义类库或系统类库中选择程序集,这里我们绑定的系统程序集,把隐藏系统程序集取消勾选,选择TrackBar控件。

 

 我已经添加过绑定了,所以最后会出现两个Source,选择其中一个即可。设计器下方会自动添加一个BindingSource控件。到此已完成实例控件属性到类属性的绑定,我们还需要给这个绑定对象赋实例对象。我们在代码中给其赋值即可实现二个对象的绑定。

        通过代码手动绑定

我们看一下设计器自动生成代码

this.components = new System.ComponentModel.Container();
this.label1 = new System.Windows.Forms.Label();
this.trackBar1 = new System.Windows.Forms.TrackBar();
this.textBox1 = new System.Windows.Forms.TextBox();
this.trackBarBindingSource = new System.Windows.Forms.BindingSource(this.components);

this.label1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.trackBarBindingSource, "Value", true));

this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.trackBarBindingSource, "Value", true));

 DataBindings.Add方法有6个重载。分别是:属性名、数据源、数据成员、格式化使能、数据源更新模式、数据源为空时的默认值。因此,我们可以这样写:

private void Form1_Load(object sender, EventArgs e)
{
     BindingSource source = new BindingSource();
     source.DataSource = this.trackBar1;
     this.textBox1.DataBindings.Add("Text", source, "Value");
     this.label1.DataBindings.Add("Text", source, "Value");
}

默认的数据源更新模式:验证后更新。

绑定自定义数据类型

现在我们自定义一个类,类拥有属性Value

public class MyClass
    {
        public int Value { get; set; }
    }

更改一下绑定代码:

        MyClass mycls = new MyClass();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            BindingSource source = new BindingSource();
            source.DataSource = mycls;
//为了使现象更明显,使用立即更新模式
            this.trackBar1.DataBindings.Add("Value", source, "Value",true,DataSourceUpdateMode.OnPropertyChanged);
            this.textBox1.DataBindings.Add("Text", source, "Value", true, DataSourceUpdateMode.OnPropertyChanged);
            this.label1.DataBindings.Add("Text", source, "Value", true, DataSourceUpdateMode.OnPropertyChanged);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //断点
        }

 可见,对控件的修改可以实时反馈到类对象上。但当我们修改类对象属性时,控件在这时不会更改,如果想要类属性修改是可以实时反馈到控件上,我们需要实现 INotifyPropertyChanged接口。

    public class MyClass:INotifyPropertyChanged
    {
        private int _value;

        public int Value
        {
            get => _value;
            set
            {
                _value = value;
                OnPropertyChanged();
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/506504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud整合XXL-Job

目录 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 重点&#xff1a; 第一步&#xff1a; 整合pom文件&#xff0c;在Spring Cloud中添加XXL-Job的依赖 <!-- xxl-job-core --> <dependency><groupId>com.xuxueli<…

工业设备安装可视化AR互动培训降低企业成本

随着污水处理厂构筑物、设备、管阀及电器、仪表、自控等工艺设施逐步大型化、复杂化、多样化,污水厂日常运行安全检查尤为重要。通过对不同污水处理工艺运行厂家实际调研分析&#xff0c;发现开发污水厂AR远程可视化巡检系统是很多厂家的实际需求。 AR远程可视化巡检系统也被称…

JAVA—— Steam流

一、 引言 初识Stream流的作用&#xff1a; 需求&#xff1a;按照下面的要求完成集合的创建和遍历&#xff0c;创建一个集合&#xff0c;存储多个字符串元素 通过下面代码&#xff0c;显然我们清晰的看到使用Stream流更为方便&#xff0c;而使用不同的集合遍历就有些复杂。 i…

【CMIP6月、日数据】【ERA5-LAND陆面再分析数据】【全球VIPPHEN物候数据】

国际耦合模式比较计划进入新的阶段——第六阶段&#xff08;CMIP6&#xff09;&#xff0c;这将为气候变化研究领域提供更丰富的全球气候模式数据。相比于 CMIP5&#xff0c;CMIP6 模式有两个主要的特点&#xff1a;一是 CMIP6 考虑的过程更为复杂&#xff0c;很多模式实现了大…

js - typeof与instanceof类型判断的区别

1&#xff0c;typeof 描述&#xff1a;运算符返回一个字符串&#xff0c;表示操作数的类型。 常用的类型判断 console.log(typeof 42); // numberconsole.log(typeof "blubber"); // stringconsole.log(typeof true); // booleanconsole.log(…

【Linux】Linux入门学习之常用命令一

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

stable diffusion 安装教程

stable diffusion安装教程 环境准备硬件要求安装软件Python 安装安装git安装cuda工具安装工具包模型下载 生成图片成果展示 环境准备 硬件要求 1.需要拥有NVIDIA显卡&#xff0c;GT1060起&#xff0c;显存4G以上。&#xff08;已经不需要3080起&#xff0c;亲民不少&#xff0…

中文润色ai-ai原创文章生成器

在现代社会&#xff0c;每天都有大量的中文文章被发布到互联网上&#xff0c;这些文章的质量和可读性直接影响着读者的阅读体验和文章的传播效果。为了让文章更加美好&#xff0c;越来越多的人开始尝试使用中文润色ai技术。 中文润色ai是一种先进的人工智能技术&#xff0c;它能…

OA办公系统能为企业带来什么好处?

在企业办公管理软件当中&#xff0c;OA系统一直都是最受欢迎也是很多大中型企业不可或缺的管理系统。企业OA办公系统是将计算机、通信等现代化技术运用到传统办公方式&#xff0c;进而形成的一种新型办公方式。办公自动化利用现代化设备和信息化技术&#xff0c;代替办公人员传…

10分钟拥有自己的Chatgpt网站(八)

文章目录 使用Vercel托管平台搭建免费Chatgpt网站前言Fork chatgpt-vercel 到自己的github把 chatgpt-vercel 托管到vercel平台注意vercel分配的域名被墙,需要我们自己去配置自己的域名:总结使用Vercel托管平台搭建免费Chatgpt网站 前言 需要有github账户,进行对开源项目进…

vue3学习六 hooks

vue3中的 hooks 它的作用&#xff0c; 有点像 vue2中的mixins 的作用 相当于是把一个功能性的一组方法&#xff0c; 封装的别的地方&#xff0c; 当每一个 component中需要用到相应的组件的时候&#xff0c; 可以很方便用引入其中来使用 举个栗子 我们有很多的页面&#xff0c…

虚拟面试系统安装使用说明

虚拟面试系统安装使用说明 虚拟面试系统是程序员参加面试的虚拟系统&#xff0c;该软件中的测试题只针对程序员设计&#xff0c;不针对其它人员。面试流程可适用于所有大众行业。 一&#xff0e;安装与卸载 1&#xff0e;安装 本软件只有安装之后&#xff0c;才能运行。 安装方…

【Golang】排查 Build constraints exclude all the go files 的几个思路

输出该问题时说明在 Go 语言的启动编译&#xff08;Build&#xff09;阶段&#xff0c;出现了编译问题&#xff0c;往往是编译配置的问题。可以通过以下思路去排查对应的错误。 一、查看 go env &#x1f636;‍&#x1f32b;️ &#xff08;1&#xff09;首先可以查看被排除的…

【iOS开发】理解OC的类,父类,元类的关系

文章目录 前言1.1 类和对象的关系2.1 类的结构体2.2对象的结构体2.2.1元类2.2.2 涉及消息转发机制2.2.3 元类也有类2.3.4 对象和Class的 isa指针 前言 在OC中&#xff0c;有对象objc&#xff0c;有类Class&#xff0c;有父类SuperClass&#xff0c;其实还有一种元类MetaClass。…

嚯——ChatGPT是很强,但也会胡说八道。。。

现在的ChatGPT确实强&#xff0c;但是也会一本正经的胡说八道&#xff0c;例如它回答“nineteen”中有12个字母、或是旗鱼是哺乳动物…… 尽管ChatGPT可以生成流畅甚至优雅的散文&#xff0c;轻松通过困扰了AI领域超过70年的图灵测试基准&#xff0c;但它也可能看起来非常愚蠢…

【设计模式】| 修炼内功 | 23种设计模式——单例模式

设计模式如同织锦之艺术&#xff0c;精心构筑&#xff0c;展示优美。 学习设计模式&#xff0c;犹如追逐清晨的曙光&#xff0c;扉页掀开了人生的新篇章。当你学会设计模式的奥秘&#xff0c;就如同走进了灯火通明的城市&#xff0c;丰富多彩的建筑&#xff0c;让你大开眼界&am…

Postman安装及入门接口测试使用步骤

前言 在软件测试行业中&#xff0c;作为一款比jemter更便捷更好用的软件测试工具&#xff0c;postman以其便捷灵活性首当其冲&#xff0c;成为当今测试行业领域使用较广泛的主流系统软件接口测试工具。今天Darren洋为大家讲解postman这款软件测试工具的下载安装及入门接口测试步…

Sentinel实现动态配置的集群流控的方法

Sentinel实现动态配置的集群流控的方法 介绍 06-cluster-embedded-8081 为什么要使用集群流控呢&#xff1f; 相对于单机流控而言&#xff0c;我们给每台机器设置单机限流阈值&#xff0c;在理想情况下整个集群的限流阈值为机器数量✖️单机阈值。不过实际情况下流量到每台…

拉绳位移传感器连接到PLC并采集数据到物联网云平台

拉绳位移传感器是一种利用绳材收卷轮周长来计量物体长度或距离的传感器设备&#xff0c;其作用就像是一把卷尺&#xff0c;通过拉绳的长度变化测出位移量&#xff0c;并转换为数字量提供到电子信息系统中&#xff0c;在建筑、水利、地质勘察、采矿、制造加工以及渔业等广泛应用…

elementUI中折叠面板箭头图标位置调整到最左边

跟flex布局有关 原始代码 <div id"app"> <el-collapse v-model"activeNames" change"handleChange"><el-collapse-item title"一致性 Consistency" name"1"><div>与现实生活一致&#xff1a;与现…