WPF数据绑定详解
元素绑定
数据绑定最简单的形式是,源对象是WPF元素而且源属性是依赖属性。依赖项属性具有内置的更改通知支持,当在源对象中改变依赖项属性的值时,会立即更新目标对相中的绑定属性。
<!--Xaml程序 -->
<Grid>
<StackPanel>
<Button x:Name="btn" Margin="20" Click="btn_Click" Width="40" Height="35"/>
<TextBox Text="{BindingElementName=txt2,Path=Text,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<!-- TextBox绑定属性名为txt2,绑定其Text,双向绑定,属性改变时更新 -->
<TextBlock x:Name="txt2" />
</StackPanel>
</Grid>
//后台程序
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btn_Click(object sender, RoutedEventArgs e)
{
txt2.Text += "k";
}
}
BindingMode枚举值
| 名称 | 说明 |
|---|---|
| OneWay | 当源属性变化时更新目标属性 |
| TwoWay | 当源属性变化时更新目标属性,当目标属性变化时更新源属性 |
| OneTime | 最初根据源属性设置目标属性,其后的改变会忽略。 |
| OneWayToSource | 与OneWay类型相似,但方向相反。 |
| Default | 此类绑定依赖于目标属性 |
UpdateSourceTrigger
| 名称 | 说明 |
|---|---|
| Default | 默认值,与依赖属性有关 |
| Explicit | 必须在显示地调用BindingExpression.UpdateSource的情况下才更新源。 |
| LostFocus | 控件失去焦点的时候更新源值 |
| PropertyChanged | 绑定的目标值改变时更新。 |
数据绑定
<!-- Xaml程序 -->
<Grid>
<StackPanel>
<DataGrid ItemsSource="{Binding PerList}" IsReadOnly="True"></DataGrid>
<ComboBox x:Name="com" ItemsSource="{Binding PerList}" DisplayMemberPath="Name" Margin="10" Width="80" Height="30"/>
<!--绑定PerList,展示其Name属性 -->
</StackPanel>
</Grid>
//后台程序
public partial class MainWindow : Window
{
public List<string> LT { get; set; }
List<Person> Perss { get; set; }
public MainWindow()
{
PersonList perlist = new PersonList(); //创建一个PersonList对象
Perss = new List<Person>() { new Person("Getsu1","男"), new Person("Getsu2", "男"), new Person("Getsu3", "男")};
perlist.PerList = Perss; //给PerList属性赋值
this.DataContext = perlist; //将perlist加入上下文,设置之后绑定才会有效
}
}
public class PersonList
{
public List<Person> PerList { get; set; }
public PersonList()
{
PerList = new List<Person>();
}
public class Person
{
private string _name;
private string _sex;
public string Name
{
get { return _name; }
set{ _name = value; }
}
public string Sex
{
get { return _sex; }
set{ _sex = value; }
}
public Person(string name, string sex)
{
Name = name;
Sex = sex;
}
}
}
INotifyPropertyChanged
属性更改通知接口。向客户端发出某一属性已更改的通知。
event PropertyChangedEventHandler PropertyChanged;
PropertyChanged 在属性改变时发生。
<!-- X -->
<StackPanel>
<TextBox Text="{Binding Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>
<TextBox Text="{Binding Sex,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>
<TextBlock Text="{Binding Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<!-- 不会随着TextBox内容的改变而改变-->
<TextBlock Text="{Binding Sex,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<!-- 会随着TextBox内容的改变而改变-->
</StackPanel>
//后台程序
public partial class MainWindow : Window
{
public MainWindow()
{
Person per = new Person("kakarot", "Male");
this.DataContext = per;
InitializeComponent();
}
}
public class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
private string _sex;
public string Name
{
get { return _name; }
set
{
_name = value;
//NotifyPropertyChanged("Name");
}
}
public string Sex
{
get { return _sex; }
set
{
_sex = value;
NotifyPropertyChanged("Sex");
}
}
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public Person(string name, string sex)
{
Name = name;
Sex = sex;
}
}
特性
public string Sex
{
get { return _sex; }
set
{
_sex = value;
NotifyPropertyChanged();
//使用特性之后可以自动获取属性名
}
}
//特性的表示
private void NotifyPropertyChanged([CallerMemberName]String info="默认值")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
作者:GetsuKami
链接:https://www.jianshu.com/p/fc644333a9e5
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
WPF数据绑定详解的更多相关文章
- AngularJS语法基础及数据绑定——详解各种数据绑定指令、属性应用
AngularJS简单易学,但是功能强大.特别是在构建单页面应用方面效果显著.而 数据绑定 可以说是他被广泛使用的最主要的优点.他舍弃了对DOM的操作方式,一切都由AngularJS来自动更新视图,我 ...
- WPF DrawingVisual详解
在WPF中,如果需要绘制大量图形元素,并且对性能要求严苛的话,最好使用DrawingVisual,当然,你也可以选用 Path类和比Path类更轻量级的Geometry(几何形状)来实现你的需求,但是 ...
- [Aaronyang] 写给自己的WPF4.5 笔记7[三巴掌-ItemsControl数据绑定详解与binding二次处理 3/3]
我要做回自己--Aaronyang的博客(www.ayjs.net) 博客摘要: 全方位的讲解了转换器的使用,单值,多值转换器,条件转换器,StringFormat等方式 详细的实践地讲解了Items ...
- SpringMVC类型转换、数据绑定详解[附带源码分析]
目录 前言 属性编辑器介绍 重要接口和类介绍 部分类和接口测试 源码分析 编写自定义的属性编辑器 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那 ...
- AngularJS开发指南12:AngularJS的模板,CSS,数据绑定详解
模板 AngularJS模板是一种声明式的规则.它包含了模型和控制器的信息,最后会被渲染成用户在浏览器中看到的视图.它是静态的DOM,包含HTML,CSS和AngularJS指定的元素和属性.Angu ...
- SpringMVC类型转换、数据绑定详解
public String method(Integer num, Date birth) { ... } Http请求传递的数据都是字符串String类型的,上面这个方法在Controller中定义 ...
- vue中的双向数据绑定详解
前言 什么是数据双向绑定? vue是一个mvvm框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化.这也算是vue的精髓之处了.值得注意的是,我 ...
- jquery.tmpl.min.js--前端实现模版--数据绑定--详解
动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在 ...
- WPFの触发器详解
例子1 简单触发器Triggers——满足简答的条件,触发 <Window x:Class="Styles.SimpleTriggers" xmlns="http: ...
随机推荐
- python collections模块 之 ChainMap
ChainMap提供了一种多个字典整合的方式,它没有去合并这些字典,而是将这些字典放在一个 maps (一个列表)里,内部实现了很多 dict 的方法,大部分 dict 的方法,ChainMap 都能 ...
- <每日一题>题目20:简单python练习题(11-20)
#11.编写程序,输入一个自然数,输出它的二进制.八进制.十六进制表示形式 Num = input("请输入任性自然数:") Num = eval(Num) print(" ...
- adb命令总结
- 从0开始学习ssh之岗位管理
岗位应该有如下属性,id.名称.说明.新建role.java.添加id,name,description并增加三个的get set方法. 之后建立Role.hbm.xml 并加入到applicatio ...
- 网络结构解读之inception系列三:BN-Inception(Inception V2)
网络结构解读之inception系列三:BN-Inception(Inception V2) BN的出现大大解决了训练收敛问题.作者主要围绕归一化的操作做了一系列优化思路的阐述,值得细看. Batch ...
- 嘴巴题8 BZOJ2318: Spoj4060 game with probability Problem
Time Limit: 1 Sec Memory Limit: 128 MB Submit: 555 Solved: 273 [Submit][Status][Discuss] Description ...
- 03.Hibernate配置文件之核心配置文件
一.核心配置文件的两种配置方式 1.属性文件方式 hibernate.properties(基本不会选用 hibernate.connection.driver_class=com.mysql.jdb ...
- pycharm 安装与激活
---恢复内容开始--- 环境:Windows 专业版 1.下载安装 1.到官网下载专业版(专业版功能更全(但要激活码),社区版免费) 2.下载完后双击.exe 文件进行安装 NEXT 下一步 NEX ...
- 在Linux下使用gcc运行C语言程序
Linux下使用最广泛的C/C++编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具.本教程毫不犹豫地使用GCC来编译C程序. ...
- 如何收缩Mysql的ibdata1文件
ibdata1是MySQL数据库中一个数据文件了,你会发现它来越大了,下面我来介绍收缩Mysql的ibdata1文件大小方法. 如果你有使用InnoDB来存储你的Mysql表,使用默认设置应该会碰到个 ...