当前位置: 首页 > news >正文

Wpf的Binding

前言

wpf的Binding就像一个桥梁,它的作用就是连接逻辑层与界面层,既能够把逻辑层的数据搬到界面层展示,又能将界面层的数据更改后传递到逻辑层,Binding的数据来源就是Binding的源,数据展示的地方就是Binding的目标。

1、新建一个类

下面的代码中新建了一个Student类,该类有一个简单的属性Name, 并且该类实现了INotifyPropertyChanged接口,实现该接口的目的是当Name属性的Set方法被触发以后通过PropertyChanged事件就能通知Binding,Name属性值已发生更改,从而通知Binding的目标更新界面,该类的对象可以作为Binding的源。

   class Student: INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged;private string name;public string Name{get{return name;}set{name = value;if(this.PropertyChanged !=null){PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));}}}}

2、准备界面

容器StackPanel中放了一个Button一个TextBox,并且给Button注册了一个事件btn_Test_Click,每次点击Button就会把Student类的对象的Name值+10,这个对象就是Binding的源,这样就相当于利用Button去改变Binding源的值。

<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp1"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><Button x:Name="btn_Test"  Height="20" Click="btn_Test_Click"/><TextBox x:Name="tbx_test"  Height="20"/></StackPanel>
</Window>
  private void btn_Test_Click(object sender, RoutedEventArgs e){student.Name += "10";}

3、准备数据源、Binding、简历源和目标的连接

下面代码中首先通过new一个Student类的对象建立了一个Binding源;然后声明一个Binding类的对象,指定Binding对象源是student对象,并且指定Binding的Path也就是源中的属性是Name(对应student的Name属性);最后使用BindingOperations.SetBinding方法建立源和目标之间的关联,该方法第一个参数是目标对象,这里对应tbx_test,第二个参数是目标的属性,这里是对应 TextBox属性,第三个参数是Binding对象,这样就建立了源(Student的Name属性)、目标(tbx_test的Text属性)

  Student student;public MainWindow(){InitializeComponent();student = new Student();//准备数据源Binding binding = new Binding();//声明Binding对象binding.Source = student;//指定Binding的源binding.Path = new PropertyPath("Name"); //指定Binding的路径,也就是源的哪个属性BindingOperations.SetBinding(this.tbx_test, TextBox.TextProperty, binding);//分别指定Binding的目标对象、目标对象的哪个属性,Binding对象//tbx_test.SetBinding(TextBox.TextProperty ,new Binding ("Name"){ Source=student });}

4、运行结果

点击一次按钮,tbx_test就会增加“10”
在这里插入图片描述

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录)

1、《C#串口通信从入门到精通》
2、《C#与PLC通信从入门到精通 》
3、《C# Modbus通信从入门到精通》
4、《C#Socket通信从入门到精通 》
5、《C# MES通信从入门到精通》
6、《winform控件从入门到精通》
7、《C#操作MySql数据库从入门到精通》

http://www.lryc.cn/news/575267.html

相关文章:

  • Deepoc大模型:精密制造智能化的“数字孪生引擎”
  • RabbitMq中使用自定义的线程池
  • 多个 Job 并发运行时共享配置文件导致上下文污染,固化 Jenkins Job 上下文
  • 联邦学习差分隐私系统的参与角色、密钥分发及攻击分析
  • 爽提配送:以专业守护校园,用匠心重塑安全
  • 理论加案例,一文读懂数据分析中的分类建模
  • 科技筑防线 智慧守平安——中物九联携硬核科技亮相四川防灾减灾盛会
  • 【MySQL】12. C语言与数据库的连接
  • 区间求最值问题高效解决方法
  • 深入理解残差网络(ResNet):原理与PyTorch实现
  • 搭建自己的WEB应用防火墙
  • RabbitMq中启用NIO
  • 【评估指标】IoU 交并比
  • 工业“三体”联盟:ethernet ip主转profinet网关重塑设备新规则
  • 智哪儿专访 | Matter中国提速:开放标准如何破局智能家居“生态孤岛”?
  • Selenium 二次封装通用页面基类 BasePage —— Python 实践
  • GBDT:梯度提升决策树——集成学习中的预测利器
  • Git上传代码如何解决Merge冲突
  • 时序数据库 TDengine 助力华锐 D5 平台实现“三连降”:查询快了,机器少了,成本也低了
  • 【目标检测】平均精度(AP)与均值平均精度(mAP)计算详解
  • MicroPython网络编程:AP模式与STA模式详解
  • 大塘至浦北高速分布式光伏项目,让‘交通走廊’变身‘绿色能源带’
  • 深度学习入门--(二)感知机
  • python的kivy框架界面布局方法详解
  • react中使用3D折线图跟3D曲面图
  • Vue Devtools “Open in Editor” 配置教程(适用于 VSCode 等主流编辑器)
  • 大语言模型(LLM)初探:核心概念与应用场景
  • 【MongoDB】MongoDB从零开始详细教程 核心概念与原理 环境搭建 基础操作
  • DeepSeek模型接入LangChain流程(详细教程)
  • 永磁同步电机无速度算法--基于同步旋转坐标系锁相环的滑模观测器