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

Nginx配置相关结构划分的技巧和禁止IP访问

Nginx配置相关结构划分的技巧原文来自&#xff1a;http://developer.51cto.com/art/201003/190953.htm Nginx配置需要一定的技巧&#xff0c;我们在不断的使用和维护中就会发现这些&#xff0c;接下来就向大家介绍下有关Nginx配置的相关技巧。我目前的Nginx配置是拆散的&#x…

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

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

ubuntun中文读书笔记

在Linux中&#xff0c;所有设备都是用文件名来表示的。Linux中只有文件和目录&#xff0c;所有的文件和目录都以倒树状结构挂载在”/”(根目录)目录下。在Linux中如果要执行以命令可以通过 # 命令名 [-选项] 参数。在命令名、选项或者参数之间都是至少要有一个空格&#xff0c;…

开发Android应用 提升性能的小技巧

前  言 2015年&#xff0c;Android OS 目前在手机操作系统的市场占有率已达59%&#xff0c;权威机构预计&#xff0c;Android市场占有率在2016年将达到63%&#xff0c;由于Android的开放性&#xff0c;未来占有率还将不断增加&#xff0c;Android的NDK支持C/C语言&#xff0c…

SQL Server 中使用 Try Catch 处理异常

1 CREATE TABLE ErrorLog(2 errNum INT,3 ErrSev NVARCHAR(1000),4 ErrState INT,5 ErrProc NVARCHAR(1000),6 ErrLine INT,7 ErrMsg NVARCHAR(2000)8 )9 10 CREATE PROCEDURE ProcErrorLog 11 AS 12 BEGIN 13 SELECT 14 ERROR_NUMBER() AS ErrNum,--返回导致运…

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…

[转]android 获取手机GSM/CDMA信号信息

本文转自&#xff1a;http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/ 在Android中我们常用的轻松获取WIFI信号列表&#xff0c;那如何获取CDMA或者GSM的手机信号呢&#xff1f;系统提供了TelephonyManager类&#xff0c;此类非常丰富&#xff0c;基本你所…

数码管流动显示(自己的单片机)

/********************************************************************************** * 标题: 试验数码管上显示数字( 单片机直接实现位选 共阴极) * * * * …

Hibernate懒加载

在Hibernate框架中&#xff0c;当我们要访问的数据量过大时&#xff0c;明显用缓存不太合适&#xff0c; 因为内存容量有限 &#xff0c;为了减少并发量&#xff0c;减少系统资源的消耗&#xff0c;这时Hibernate用懒加载机制来弥补这种缺陷&#xff0c;但是这只是弥补而不是用…

迪拜“烧掉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的基本概念&…

研究生计划-心得征程

以前定过一个计划&#xff0c;现在觉得有必要在重新规划一次&#xff0c;毕竟见识和认识有深了 1、编译原理&#xff0c;前些天是把数据结构写完了&#xff0c;编译原理也一直没看&#xff0c;所以下一步深入学习编译原理 2、学习PHP框架&#xff0c;像wordpress和yii,PHP也算入…

java launcher 下载_Java Launcher下载并安装

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

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

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