Binding在WPF中的使用

闲来无事,不想打DOTA,在这里小小研究下wpf中关于Binding的东西。

咯咯


在我们印象中,Binding的意思是“绑定”,这个“绑”大概取自于Bind这个单词吧,这么理解的话就是以音译英了,没什么实际意义。

Bind这个单词的动词形式是Binding,看看字典就知道除了前面说的“捆绑”之外,还有“键联”,“关联”的意思。比如原子键联(atomic binding),化学键联(binding-beam)等。也就是说啦,Binding更注重于表达的是一种“关系”,而不是一个动作。如果把Binding比作数据的桥梁,那么它的两端分别是Binding的源(Source)和目标(Target)。它描述了数据从哪来到哪去,一般情况下Binding的源是逻辑层的对象,目标是表现层(UI)的控件对象,我们不但可以控制源与目标之间双向或者单向的道路,还可以控制对数据的放行机制。那么下面我来搞一个简单的例子。

先做一个源数据,一个来自于逻辑层的对象

class Student
{private string name;public string Name{get{return name;}set{name = value;}}
}

属性是有了,可是我的目标完全不知道当我的属性发生变化时,源怎么通知我的目标,告诉它源数据变化了?所以,这样一个简单的类显然不科学。完善一下它,让它去继承

System.ComponentModel下的INotifyPropertyChanged接口就行了

那么完整的类应该是这个样子

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

看,当为Binding设置了数据源之后,它会自动监听来自PropertyChanged这个接口的事件,Name发生变化,触发propertyChanged事件,Binding监听到了触发的事件,它会告诉UI层的控件Name这个属性的值发生变化,通知UI层控件显示新的值。

有卖就有买,下面是它的目标控件

<Window x:Class="Binding1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><StackPanel><TextBox x:Name="txtBoxName" BorderBrush="Black" Margin="5"></TextBox><Button Content="AddAge" Margin="5" Click="Button_Click"></Button></StackPanel>
</Window>

写了一个TextBox作为Binding的目标和一个按钮Button来触发改变Name值得事件。

然后就是介绍他们俩认识的时候了。。。

public partial class MainWindow : Window{Student stu;public MainWindow(){InitializeComponent();//准备数据源stu = new Student();//把stu.Name作为Binding的数据源Binding binding = new Binding();binding.Source = stu;binding.Path = new PropertyPath("Name");//使用Binding连接源和目标,把stu的Name属性值联系到一个叫做"txtBoxName"的TextBox上去BindingOperations.SetBinding(this.txtBoxName, TextBox.TextProperty, binding);}private void Button_Click(object sender, RoutedEventArgs e){stu.Name += "屎兔子";}}

运行效果

当然,也可以把上面的代码这么写,借助Binding类构造器和C#3.0的对象初始化语法来简化代码

public Window1()
{InitializeComponent();
this.txtBoxName.SetBinding(TextBox.TextProperty,new Binding("Name"){Source = stu = new Student()}); }
private void Button_Click(object sender, RoutedEventArgs e)
{stu.Name += "屎兔子";
}

好了,一个简单的例子写到这里,明天继续详细学习。(下午下午媳妇一直问我那个疯狂猜图的答案,表示我也迷恋了,去玩会儿~)

 

 

转载于:https://www.cnblogs.com/Mushrooms/p/3142559.html

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

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

相关文章

WPF 模仿IconPacks库写图标按钮

先上原链接&#xff0c;一个很不错的wpf图标库 : https://github.com/MahApps/MahApps.Metro.IconPacks提供了大量的图标可以用&#xff0c;如下图&#xff1a;&#xff08;部分截图&#xff09;简单分析了一下代码&#xff0c;并模仿它写一个图标类和简单的使用示例&#xff1…

java线程死锁 cpu 100%_一文学会Java死锁和CPU 100% 问题的排查技巧

做一个积极的人编码、改bug、提升自己我有一个乐园&#xff0c;面向编程&#xff0c;春暖花开工欲善其事&#xff0c;必先利其器00 本文简介作为一名搞技术的程序猿或者是攻城狮&#xff0c;想必你应该是对下面这两个问题有所了解&#xff0c;说不定你在实际的工作或者面试就有…

3D版的TagView,效果很赞

在gitHub看到的&#xff0c;感觉效果不错。 看看效果&#xff1a; Demo&#xff1a;http://download.csdn.net/detail/u012808234/9426716

5部高分学科纪录片,在家也能受益良多!

全世界只有3.14 % 的人关注了爆炸吧知识▌导读本文为同学们整理了5部高分经典学科纪录片&#xff0c;这不仅是课堂学习的补充与延伸&#xff0c;更是开拓视野、激发学习内驱力的绝佳利器。建议收藏&#xff01;&#xff08;关注视频号少年数学家&#xff0c;呈现最直观的数学&a…

Hibernate 对象的三种状态

Hibernate 对象的三种状态 瞬时&#xff08;transient&#xff09;: 由new操作符创建&#xff0c;且尚未与Hibernate Session关联的对象被认定为瞬时&#xff08;Transient&#xff09;的。瞬时&#xff08;Transient&#xff09;对象不会被持久化到数据库中&#xff0c;也不会…

升级Jenkins镜像,支持.NET6.0

&#xff08;寒天催日短&#xff0c;风浪与云平&#xff09;书接上文&#xff0c;上回咱们说到了《【Blog.Core开源】完成升级.NET 6.0》&#xff0c;只是代码层面的升级&#xff0c;今天趁着周末正好把生产环境也升级下&#xff08;大家可以酌情升级哟&#xff09;。过程很简单…

女朋友来大姨妈怎么办?

1 医生的工伤怎么算&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 大风车呀吱悠悠的转&#xff01;&#xff08;via&#xff1a;草多南&#xff09;▼3 买了个丑酸奶&#xff01;▼4 和老爸讨论谈恋爱&#xff08;via&#xff1a;张子乐_&#xff0…

迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;普象工业设计小站天呐&#xff01;最新消息阿布扎比酋长国又发现220亿桶非常规可采石油让原本富有的国家更加钱上有钱尤其是它的兄弟国——迪拜简直“豪”无人性耗资800亿美元的“世界岛”惨成全球最大烂尾项目竟没有表示…

英特尔收购威盛X86业务 兆芯何去何从

日前&#xff0c;英特尔公司以1.25亿美元收购威盛麾下Centaur 公司的x86业务。Centaur 是威盛的一家子公司&#xff0c;20多年前&#xff0c;威盛依靠数笔收购获得了x86授权&#xff0c;开发了数款X86芯片&#xff0c;由于性能与英特尔和AMD差距太大&#xff0c;威盛的X86 CPU在…

.net中的mapinfo开发:准备(一)

最近开发一个项目&#xff0c;用到了mapinfo的开发&#xff0c;所以想把自己研究的一些东西记录下来&#xff0c;一则供自己使用&#xff0c;二则供一些同道中的朋友参考&#xff0c;有什么不当之处&#xff0c;请提示&#xff0c;再做修改。 首先要了解一下mapinfo的基本概念&…

java launcher 下载_Java Launcher下载并安装

通过双击资源管理器中的类文件来运行Java程序&#xff0c;并创建一个EXE和可执行的JAR文件Java启动器通过双击类文件来运行Java应用程序和小程序. 通过右键单击以图形格式查看类源代码和类层次结构&#xff1b;显示jar和zip文件的内容java下载安装&#xff0c;而不是通过右键单…

自带数据线的迷你数显充电宝,好用到哭

▲ 点击查看无论是付钱办事坐车&#xff0c;还是游戏追剧闲聊&#xff0c;有个手机就够了啊~这也就导致了&#xff0c;出门最怕的不是没带钱&#xff0c;而是带了手机却没电了。手机没电&#xff01;这简直能要了老命啊&#xff01;幸好有充电宝“续命”&#xff01;但每回在打…

VmWare5.5主机Citrix桌面实施方案(二)

三、配置数据库服务器安装数据库服务器分别在三台机器上安装SQL2008运行安装程序图示3.1点击确定继续图示3.2使用全新安装图示3.3图示3.4输入密钥继续图示3.5接受条款图示3.6进行安装图示3.7图示3.8图示3.9图示3.10图示3.11图示3.12图示3.13指定启动SQL账户图示3.14指定管理员图…

java定义接口_一文知道Java中接口的定义

使用interface来定义一个接口。接口定义同类的定义类似&#xff0c;也是分为接口的声明和接口体&#xff0c;其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下&#xff1a;方法&#xff1a;接口中的方法只有定义而没有被实现。1.接口是一组行为的规范、定义&…

告诉你一个可怕的数学事实:公路越多,城市越堵!

全世界只有3.14 % 的人关注了爆炸吧知识生活依旧美好上周&#xff0c;刘强西带着小天到附近的清扬山放松一下。然而&#xff0c;从京西大旅馆有两条路可以到清扬山。一条是金龙大道&#xff0c;前半程走完需要20分钟&#xff0c;但可怕的是路窄&#xff0c;车辆一多就慢&#x…

官方精简版!Windows 10 LTSC 2021 正式发布

微软现已正式发布 Windows 10 企业版 LTSC 2021。LTSC 全称为 the Long-Term Servicing Channel&#xff0c;即长期服务频道。使用 LTSC 服务模型&#xff0c;Windows 10 电脑可以延迟接收功能更新&#xff0c;功能更新每 2-3 年&#xff08;Windows 10 家庭版和专业版等此前为…

不喜欢写测试的朋友看过来,与你分享写测试的经验 做一个爱写测试的程序员...

自从掌握了单元测试的要领之后&#xff0c;经常写测试&#xff0c;做测试&#xff0c;也非常喜欢做单元测试。我的文章《数据采集&#xff1a;完美下载淘宝Ip数据库 简单的程序节省60元人民币而不必购买数据库》中的代码&#xff0c;也是个测试方法&#xff0c;源代码在QQ群中公…

Struts2内置拦截器和自定义拦截器

内置拦截器 Struts2中内置类许多的拦截器&#xff0c;它们提供了许多Struts2的核心功能和可选的高级特性。这些内置的拦截器在struts-default.xml中配置。只有配置了拦截器&#xff0c;拦截器才可以正常的工作和运行。Struts 2已经为您提供丰富多样的&#xff0c;功能齐全的拦截…

基于eclipse RCP的文件夹管理工具

总的来说, Windows7的文件夹浏览器已经提供了很好的功能, 但是也有一些鞭长莫及的地方,比如: 无法搜索指定文件夹里面某些文件夹的文件我将经常使用的图标资源分成几个目录存放于一个文件夹中, 这些资源风格不同,来源也不同. 有些是来自开源项目的, 有些是来自iconfinder, 还有…

.NET 6新特性试用 | 异步流

前言IAsyncEnumerable<T>支持返回异步迭代的枚举器&#xff0c;但在.NET 6之前&#xff0c;即使在API中使用了IAsyncEnumerable<T>&#xff0c;它还是使用同步方式输出&#xff0c;首先将结果缓冲到内存中&#xff0c;然后再写入响应中&#xff1a;[HttpGet] publi…