深入浅出WPF(Binding篇1)
Binding在业界的使用一直是音译而来的,称为"Binding"。Binding的源是逻辑数据对象,目标则是UI层上面的控件对象。数据通过Binding送达UI层,被UI层展示出来,也就完成了数据驱动UI的过程了。
下面通过一个很简单的列子来引入我们最原始的Binding:
<Window x:Class="BindingTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BindingTest"
mc:Ignorable="d"
Title="MainWindow" Height="100" Width="400">
<StackPanel>
<TextBox Name="MyTextBlock" BorderBrush="Black" Margin="3"/>
<Button Content="Add Age" Margin="3" Click="Button_Click"/>
</StackPanel>
</Window>

Binding有一种自动机制,就是当后台绑定的属性值发生改变时,会自动通知给UI元素,怎么样才能让属性具备这样的能力呢,其实只需要在属性set的时候去触发PropertyChanged事件。这个事件不需要我们声明,只需要我们去实现INotifyPropertyChanged接口。实现了此接口的学生类如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace BindingTest.Models
{
public class Student : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public int _age;
public int Age
{
get { return this._age; }
set
{
if (value != )
{
this._age = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Age)));
}
}
}
}
}
最终在窗体的后台代码中:
namespace BindingTest
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
Student studen;
public MainWindow()
{
InitializeComponent();
studen = new Student();
Binding binding = new Binding();
binding.Source = studen;
binding.Path = new PropertyPath("Age");
BindingOperations.SetBinding(this.MyTextBlock, TextBox.TextProperty, binding);//设置目标对象的属性和源的绑定
} private void Button_Click(object sender, RoutedEventArgs e)
{
studen.Age += ;//改变对象,页面中textbox中数据也会变化
}
}
}
1绑定的源和路径
1.1 控件作为binding的源
Ui元素之间有时候需要进行一些关联效果可以利用Binding在控件之间建立关联,下面的代码就是将TextBlock的text和Slider(滑动条)的value进行了关联。运行下面这段代码就会发现当Slider滑动的时候,TextBlock中的值会随之改变。
<Window x:Class="BindingTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BindingTest"
mc:Ignorable="d"
Title="MainWindow" Height="" Width="">
<StackPanel>
<Slider Value="" Name="slider1" Minimum="" Maximum=""></Slider>
<TextBlock Text="{Binding ElementName=slider1,Path=Value}" Margin=""></TextBlock>
</StackPanel>
</Window>
可以通过设置Binding的Mode来设置数据流向,一般有TwoWay,OneWay,OnTime,OneWayToSource以及Default,如果不设置就是Default,如果你的目标控件是用户可编辑的就是双向的,比如TextBox如果是不可编辑的,那么就是单向的,比如TextBlock。
深入浅出WPF(Binding篇1)的更多相关文章
- [转]深入浅出WPF(7)——数据的绿色通道,Binding
本文转自:http://liutiemeng.blog.51cto.com/120361/95273 小序: 怎么直接从2蹦到7啦?!啊哦,实在是不好意思,最近实在是太忙了,忙的原因也非常简单——自己 ...
- 《深入浅出WPF》笔记——模板篇
原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...
- 《深入浅出WPF》重点摘要(—)Binding自动通知机制
最近因为公司的项目需要用WPF开发,就学习了一下WPF.刚开始只是用到什么就百度什么,虽然功能是实现了,但还是没有弄清楚原理(如果不弄清原理,会感觉很心虚,整个人会没底气),所以决定找个教程系统地学一 ...
- 《深入浅出WPF》笔记——事件篇
如果对事件一点都不了解或者是模棱两可的话,建议先去看张子阳的委托与事件的文章(比较长,或许看完了,也忘记看这一篇了,没事,我会原谅你的)http://www.cnblogs.com/JimmyZhan ...
- 《深入浅出WPF》笔记——资源篇
原文:<深入浅出WPF>笔记--资源篇 前面的记录有的地方已经用到了资源,本文就来详细的记录一下WPF中的资源.我们平时的“资源”一词是指“资财之源”,是创造人类社会财富的源泉.在计算机程 ...
- C# Note1:深入浅出WPF-MVVM篇
一.资源说明 (1)配套视频:深入浅出WPF 讲的不错! 待更!
- 【【分享】深入浅出WPF全系列教程及源码
】
因为原书作者的一再要求,在此声明,本书中的部分内容引用了原书名为<深入浅出WPF>的部分内容,假设博文不能满足你现有的学习须要,能够购买正版图书! 本人10月份提出离职,可是交接非常慢,预 ...
- 《深入浅出WPF》笔记——绘画与动画
<深入浅出WPF>笔记——绘画与动画 本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一 ...
- 深入浅出WPF(1)—转(http://liutiemeng.blog.51cto.com/120361/91631/)
深入浅出WPF(1)——什么是WPF 2008-05-15 19:06:00 小序: Hi,大家好!几乎两个月没有写技术文章了.这两个月,我在学习WPF.回顾一下两个月的学习历程,有两个感觉— ...
随机推荐
- BZOJ 1179 (Tarjan缩点+DP)
题面 传送门 分析 由于一个点可以经过多次,显然每个环都会被走一遍. 考虑缩点,将每个强连通分量缩成一个点,点权为联通分量上的所有点之和 缩点后的图是一个有向无环图(DAG) 可拓扑排序,按照拓扑序进 ...
- day17-django基础
3. Django框架 版本:1.11 创建: django-admin startprojcet xxx cd xxx python manage.py startapp app01 python ...
- service worker介绍
原文:Service workers explained 译者:neal1991 welcome to star my articles-translator, providing you advan ...
- 部分DOM事件总结
复习: 1.1 DOM:Docment Object Model 文档对象模型 当页面加载时,就会创建文档对象模型.文档对象模型被构造为DOM树: DOM树种任何一个部分都可以看做是节点对象,结构中 ...
- ES6——generator
generator 生成器函数 普通函数,一路到底 generator函数,中间可以停,到哪停呢,用 yield 配合,交出执行权 yield 有 放弃.退让.退位的意思 需要调用next()方法启动 ...
- org.hibernate.hql.ast.QuerySyntaxException: tb_voteoption is not mapped [from tb_voteoption where voteID=?]
转自:https://www.cnblogs.com/albert1017/archive/2012/08/25/2656873.html org.hibernate.hql.ast.QuerySyn ...
- openstack stein部署手册 6. nova-api
# 建立数据库用户及权限 create database nova; grant all privileges on nova.* to nova@'localhost' identified by ...
- 如何官网下载chrome谷歌浏览器离线安装包
目录 1. 下载步骤 2. 将语言更改为中文 3. 插件 3.1. chrome 网上应用店 3.1.1. google-access-helper 4. 更新失败 1. 下载步骤 注意 需要梯子才能 ...
- 使用Varnish加速Web
通过配置Varnish缓存服务器,实现如下目标: - 使用Varnish加速后端Web服务 - 代理服务器可以将远程的Web服务器页面缓存在本地 - 远程Web服务器对客户端用户是透明的 - 利用缓存 ...
- 13Ajax和JQuery
1.Ajax 1.1是什么? “Asynchronous Javascript And XML”(异步JavaScript和XML), 并不是新的技术,只是把原有的技术,整合到一起而已. 1.使用CS ...