当前位置: 首页 > 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数据库从入门到精通》

相关文章:

  • 网站 微信 app重庆seo什么意思
  • 做网站方面的问题深圳全网推广公司
  • 360个人网站怎么推广关键词搜索工具有哪些
  • 渝北网站建设seo快速入门教程
  • 泰州网站制作平台国家免费职业培训平台
  • 企业网站维护建设ppt报个计算机培训班多少钱
  • IBMS 智能化系统:让建筑提前进入 AIoT 智慧纪元​
  • 在 GitLab CI 中配置多任务
  • 康谋方案 | ARXML 规则下 ECU 总线通讯与 ADTF 测试方案
  • MicroPython网络编程:AP模式与STA模式详解
  • 专题:2025医疗AI应用研究报告|附200+份报告PDF汇总下载
  • SpringCloud系列(35)--使用HystrixDashboard进行服务监控
  • 《AI大模型应用技术开发工程师》学习总结
  • 从0开始学习R语言--Day31--概率图模型
  • jsoncpp-src-0.5.0编译
  • 多模态大模型(从0到1)
  • 抖音视频怎么去掉抖音号水印保存
  • 2023年全国青少年信息素养大赛Python 复赛真题——玩石头游戏
  • Vue 英雄列表搜索与排序功能实现
  • 各计算机语言在机器人领域的应用
  • 《汇编语言:基于X86处理器》第4章 数据传送、寻址和算术运算(2)
  • LangChain4j之会话功能AiServices工具类的使用(系列二)
  • python基础(字符串-复习)
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | MovieApp(电影卡片组件)
  • 2025湖北省职业院校技能大赛信息安全管理与评估样题
  • Springboot——整合netty并进行websocket通信