深入浅出WPF之Binding的使用(一)
来源:互联网 发布:putty阿里云服务器 编辑:程序博客网 时间:2024/05/21 11:28
from: http://www.cnblogs.com/akwwl/p/3421005.html
在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target)。
一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件对象;这样,数据就会通过Binding送达UI层,被UI层展现。
首先我们创建一个名为Student的类,这个类的实例作为数据源在UI上显示:
public class Student { private string name; public string Name { set { name = value; } get { return name; } } }
Binding是一种自动机制,当值变化后属性要有能力通知Binding,让Binding把变化传递给UI元素。
怎样才能让一个属性具备这种通知Binding值已经变化的能力呢?方法是在属性的set语句中激发一个PropertyChanged事件。这个事件不需要我们自己声明,我们要做的是让作为数据源的类实现System.ComponentModel名称空间中的INotifyPropertyChanged接口。当为Binding设置了数据源后,Binding就会自动侦听来自这个接口的PropertyChanged事件。
public class Student:INotifyPropertyChanged { private string name; public string Name { set { name = value; NotifyPropertyChanged("Name"); } get { return name; } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(propertyName)); } } }
当Name属性的值发生变化时PropertyChanged事件就会被激发,Binding接收到这个事件后发现事件的消息告诉它是名为Name的属性发生了值得改变,于是就会通知Binding目标端的UI元素显示新的值。
XAML代码:
<Grid> <TextBox x:Name="Box" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="100,50,0,0" Height="30" Width="200"/> <Button Content="按钮" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,150,0,0" Height="30" Width="160" Click="Button_Click"/> </Grid>
C#代码:
public partial class MainWindow : Window { private Student student; public MainWindow() { InitializeComponent(); student = new Student(); Binding binding = new Binding(); binding.Source = student; binding.Path = new PropertyPath("Name"); BindingOperations.SetBinding(this.Box,TextBox.TextProperty,binding); } private void Button_Click(object sender, RoutedEventArgs e) { student.Name = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } }
其中:Binding binding=new Binding()声明Binding类型变量并创建实例,
然后使用binding.Source=student为Binding实例指定数据源,
最后使用binding.Path = new PropertyPath("Name")为Binding指定访问路径。
把数据源和目标连接在一起的任务是使用BindingOperations.SetBinding(this.Box,TextBox.TextProperty,binding)方法完成的。
BindingOperations.SetBinding(this.Box, TextBox.TextProperty, binding)中的参数介绍:
第一个参数主要是指定Binding的目标。
第二个参数是用于为Binding指明将数据绑定到目标的那个属性中去,一般都为目标的依赖属性。
第三个参数是指定那个Binding将数据源与目标关联起来。
上面的代码还可以简化如下:
private void SetBinding() { student = new Student(); this.Box.SetBinding(TextBox.TextProperty, new Binding("Name") { Source=student}); }
Binding模型如下:
- 深入浅出WPF之Binding的使用(一)
- 深入浅出WPF之Binding的使用(二)
- WPF学习之Binding的学习(一)
- 【WPF】binding的使用
- WPF中Binding的技巧(一)
- WPF中Binding的技巧(一)
- WPF的Binding学习笔记(一)
- WPF中Binding的技巧(一)
- WPF的Binding基础(一)
- WPF中的binding(九)- 使用Binding的RelativeSource
- WPF之Binding基础一 UI Binding Source
- WPF Binding相关的一些常见方式总结(一)
- WPF的Binding (path)学习笔记(一)
- WPF之Binding基础四 使用DataContext作为Binding的源
- 深入浅出WPF(7)——数据的绿色通道,Binding(上)
- 深入浅出WPF(8)——数据的绿色通道,Binding(中)
- 深入浅出WPF(9)——数据的绿色通道,Binding(下)
- 深入浅出WPF(7)——数据的绿色通道,Binding(上)
- keytool-importkeypair 使用
- JAVA基础(七)迭代器及结构类模式总结
- Hdu 6047 Maximum Sequence【贪心+优先队列】
- jQuery笔记(入门简介与选择器)
- 台式电脑配置-备份参考
- 深入浅出WPF之Binding的使用(一)
- yx: SpringBoot发送邮件功能
- 欢迎使用CSDN-markdown编辑器
- Android夜间模式的实现方案
- 加速子空间迭代法(Accelerated Subspace Iteration)求特征值问题matlab程序
- linux性能概述
- Contestant Division(树形dp)
- JVM内存垃圾回收机制
- 初入Java 先规范