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
Binding在WPF中的使用相关推荐
- WPF中Binding使用StringFormat格式化字符串方法
原文:WPF中Binding使用StringFormat格式化字符串方法 货币格式 <TextBlock Text="{Binding Price, StringFormat={}{0 ...
- WPF中的Data Binding调试指南
点击蓝字"大白技术控"关注我哟 加个"星标★",每日良时,好文必达! WPF中的Data Binding如何Debug? 大家平时做WPF开发,相信用Visua ...
- 解读WPF中的Binding
1.Overview 基于MVVM实现一段绑定大伙都不陌生,Binding是wpf整个体系中最核心的对象之一这里就来解读一下我花了纯两周时间有哪些秘密.这里我先提出几个问题应该是大家感兴趣的,如下: ...
- 解答WPF中ComboBox SelectedItem Binding不上的Bug
原文:解答WPF中ComboBox SelectedItem Binding不上的Bug 正在做一个打印机列表,从中选择一个打印机(System.Printing) <ComboBox Widt ...
- WPF中ControlTemplate和DataTemplate的区别
原文:WPF中ControlTemplate和DataTemplate的区别 下面代码很好的解释了它们之间的区别: <Window x:Class="WPFTestMe.Window1 ...
- WPF中StringFormat的用法
原文:WPF中StringFormat的用法 WPF中StringFormat的用法可以参照C#中string.Format的用法 1. C#中用法: 格式化货币(跟系统的环境有关,中文系统默认格式化 ...
- WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
- WPF中如何将ListViewItem双击事件绑定到Command
原文:WPF中如何将ListViewItem双击事件绑定到Command 今天的博客将介绍如何实现ListViewItem双击事件绑定到ViewModel中的Command.实现方法借助了Style中 ...
- WPF中Expander与ListBox(ItemsControl)嵌套中的问题
原文:WPF中Expander与ListBox(ItemsControl)嵌套中的问题 1. 当ListBox放在Expander中时,为了要实现实时更新数据的效果,这里使用了 ObservableC ...
最新文章
- hihocoder 1152 Lucky Substrings
- 编程以外积累: 如何给项目生成类似VS2008的说明文档
- Splay ---- 区间翻转 区间最大值 区间加 P4146 序列终结者
- Python编程的若干个经典小技巧
- 实用:前端小白的切图技巧
- 动环监控系统的组成都有什么呢?
- Linux更改终端的用户名和主机名的颜色
- 线上开票系统设计实践
- python接口测试实战_Python接口测试实战5(下) - RESTful、Web Service及Mock Server
- windows常用命令netstat
- xcode 怎么调用midi开发录音_音频应用专业录音声卡:雅马哈UR242声卡教程
- 190122每日一句
- jedate选中日期后关闭弹层_jeDate日期控件的使用以及选中后点确定按钮关闭功能...
- 今日头条推荐算法原理全文详解之五
- 小明左右手分别拿了两张牌,黑桃十和红心八,现在交换手中的牌。编写一个程序模拟这一过程:两个整数分别保存两个变量,将这两个变量的值互换,并输出互换后的结果
- 搜索引擎优化的优势及发展问题
- 【实验】实验课总结3 实验二
- JS 大文件分割上传
- 自我和对自我与他人关系的思考
- Win10如何设置滑动关机 滑动关机快捷键怎么设置