WPF学习:绑定
原文 http://www.cnblogs.com/SouthAurora/archive/2010/06/30/1768464.html
一。绑定到元素对象
1。元素和元素(XAML、代码)
1.1XAML格式
目标属性="{Binding ElementName=源控件, Path=源属性, Mode=…}"
1.2代码:
Binding binding = new Binding();
binding.Source = 源控件;
binding.Path = new PropertyPath("Value"); //源控件属性
binding.Mode = BindingMode.TwoWay;
lblSampleText.SetBinding(TextBlock.FontSize, binding); 绑定。
1.3 演示程序…
二。绑定到非元素对象(Source/RelativeSource/DataContext)。
1。Source
1.1绑定到静态对象
FontSize="{Binding Source={x:Static 静态对象},
Path=静态对象的属性}
或者 Title="{x:Static 命名空间:静态类.属性}"
1.2绑定到资源。
FontFamily="{Binding Source={StaticResource 资源名称},
Path=资源对象的属性}"
演示例子…
2。RelativeSource:根据当前对象为基础,自动查找源并绑定。
2.1 ="{Binding RelativeSource=
{RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}},
Path=Title}"
2.2 RelativeSourceMode枚举值
|
名 称 |
描 述 |
|
Self |
表达式绑定到同一元素的另外一个属性上(在第10 章介绍了这一技术的一个示例,其中使用该技术在 触发命令的控件中显示与命令相关联的文本) |
|
FindAncestor |
表达式绑定到父元素。WPF将会查找元素树直到发 现期望的父元素。为了指定父元素,还必须设置 AncestorType属性指示希望查找的父元素的类型。 此外,还可以使用AncestorLevel属性略过发现的一 定数量的特定元素。例如,当在一棵树中查找时, 如果希望绑定到第三个ListBoxItem类型的元素, 应当进行如下设置:AncestorType={x:Type ListBoxItem}, 并且AncestorLevel=3,所以会略过前两个ListBoxItem 元素。默认情况下,AncestorLevel属性设置为1, 并且在找到第一个匹配的元素时停止查找 |
|
PreviousData |
表达式绑定到数据绑定列表中的前一个数据项。 在一个列表项中会使用这种模式 |
|
TemplateParent |
表达式绑定到应用模板的元素。只有当绑定位于一 个控件模板或数据模板内部时,这种模式才能工作 |
3。DataContext
所有的子对象可以共享一个绑定源。
父对象 = DataContext="{Binding ElementName=wndBindingType}"
子对象 = FontSize="{Binding Path=绑定源的一个属性}"
三。绑定的方向
BindingMode枚举值
|
名 称 |
描 述 |
|
OneWay |
当源属性变化时更新目标属性 |
|
TwoWay |
当源属性变化时更新目标属性, 并且当目标属性变化时更新源属性 |
|
OneTime |
最初根据源属性值设置目标属性。然而, 在此之后的所有改变都会被忽略(除非绑定 被设置到一个完全不同的对象或者调用 BindingExpression.UpdateTarget( )方法, 如在本章后面所介绍的那样)。通常,如果 知道源属性不会变化,可以使用这种模式降低开销 |
|
OneWayToSource |
和OnWay类型类似,但是方向相反。当目标 属性变化时更新源属性(这看起来有点像向后传递), 但是目标属性永远不会被更新 |
|
Default |
这种类型的绑定依赖于目标属性。它既可以 是双向的(对于用户可以设置的属性,如 TextBox.Text属性),也可以是单向的(对于 所有其他属性)。除非明确指定了另外一种模式, 否则所有的绑定都使用该模式 |
方向:
|
|
|
图16-5 绑定两个属性的不同方向 |
5。重要类
5.1 BindingOperations:清楚绑定、设置绑定、获取绑定表达式
5.2 BindingExpression:UpdateSource( )方法和UpdateTarget( )方法。
5.2.1 获取
// Get the binding that's applied to the text box.
BindingExpression binding = txtFontSize.GetBindingExpression(TextBox.TextProperty);
// Update the linked source (the TextBlock).
binding.UpdateSource();
5.3“x:Static” 根据目标对象的类型,从静态对象、属性中取值。返回值:对象/数值。
6。总结:
属性值更改需要实现:INotifyPropertyChanged
集合更改(添加删除)需要实现:INotify CollectionChanged
元素到元素的绑定依赖于依赖的属性,注册依赖属性时的属性值变更通知。
四。自定义类
1。更新实现
1.1属性依赖属性
1.2INotifyPropertyChanged
五集合绑定
ItemsControl类中用于数据绑定的属性(唯一的要求是支持IEnumerable接口)
|
名 称 |
描 述 |
|
ItemsSource |
指向一个集合,该集合包含所有在列表中显示的对象 |
|
DisplayMemberPath |
标识一个用于为每个项创建显示文本的属性 |
|
ItemTemplate |
接受一个数据模板,用于为每个项创建可视化外观。 这个属性比DisplayMemberPath属性的功能更加强大, |
ItemsControl(ListBox控件、ComboBox控件以及ListView控件(以及Menu控件和用于显示层次化数据的TreeView控件))。
二。值转换器。
IValueConverter接口的类
|
|
|
转换绑定的数据 |
<Binding Path="Code">
<Binding.Converter>
<local:PriceConverter></local:PriceConverter>
</Binding.Converter>
</Binding>
三。数据模板的使用
数据模板通常会被应用到以下几类控件来填充其类型为DataTemplate的属性:
· 内容控件(Content Control):ContentTemplate属性,控制Content的显示
· 项控件(Items Control) : ItemTemplate属性,应用于每个显示的项
· 头控件(Header Content Control) : HeaderTemplate属性,控制Header的展现。
四。视图
1。过滤
2。排序
3。分组
五。数据提供程序
1。绑定到一个实例上
1.ObjectDataProvider可以绑带构造函数带参数的对象。
2。可以绑定到方法
<local:BQItems x:Key="BQs"/>
<ObjectDataProvider x:Key="dataProviderBQ"
ObjectInstance="{StaticResource BQs}">
</ObjectDataProvider>
<ObjectDataProvider x:Key="dpHasParameter" ObjectType="{x:Type local:BQItems}">
<ObjectDataProvider.ConstructorParameters>
<sys:Int32>23</sys:Int32>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
WPF学习:绑定的更多相关文章
- 【WPF】最近在学习wpf 的绑定,,
最近在学习wpf 的绑定,,1.简单的说就是版前端和后端用自己的方法给分开了2.baseVm 模型 baseCmd 命令3.命令传参修改的只是界面里的属性,而不修改其它的值4.前端改变后端, 后端改变 ...
- WPF学习(二) - 绑定
绑定,这个看起来很神奇的东西,于我这种喜欢刨根儿的人而言,理解起来非常困难. WPF绑定的核心思想是:数据层属性值的改变,能反应给展示层,反之亦然,并且这个响应的过程能被分离出来. 传统Winf ...
- WPF学习之资源-Resources
WPF学习之资源-Resources WPF通过资源来保存一些可以被重复利用的样式,对象定义以及一些传统的资源如二进制数据,图片等等,而在其支持上也更能体现出这些资源定义的优越性.比如通过Resour ...
- WPF学习之路初识
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
- WPF学习(8)数据绑定
说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...
- WPF学习资源整理
WPF(WindowsPresentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分.它提供了统一的编程模型 ...
- WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决
原文:WPF学习笔记(8):DataGrid单元格数字为空时避免验证问题的解决 如下图,在凭证编辑窗体中,有的单元格不需要数字,但如果录入数字后再删除,会触发数字验证,单元格显示红色框线,导致不能执行 ...
- WPF学习12:基于MVVM Light 制作图形编辑工具(3)
本文是WPF学习11:基于MVVM Light 制作图形编辑工具(2)的后续 这一次的目标是完成 两个任务. 本节完成后的效果: 本文分为三个部分: 1.对之前代码不合理的地方重新设计. 2.图形可选 ...
- WPF学习11:基于MVVM Light 制作图形编辑工具(2)
本文是WPF学习10:基于MVVM Light 制作图形编辑工具(1)的后续 这一次的目标是完成 两个任务. 画布 效果: 画布上,选择的方案是:直接以Image作为画布,使用RenderTarget ...
- WPF学习09:数据绑定之 Binding to List Data
从WPF学习03:Element Binding我们可以实现控件属性与控件属性的绑定. 从WPF学习07:MVVM 预备知识之数据绑定 我们可以实现控件属性与自定义对象属性的绑定. 而以上两个功能在实 ...
随机推荐
- 英特尔发布全新英特尔® INDE 2015工具套件
2014年10月15日,英特尔发布了全新的英特尔® Integrated Native Developer Experience 2015工具套件(简称英特尔® INDE).该产品提供了一系列最佳工具 ...
- python操作redis-set
#!/usr/bin/python #!coding: utf-8 import redis if __name__=="__main__": try: conn=redis.St ...
- Nginx 配置指令的执行顺序(一)
大多数 Nginx 新手都会频繁遇到这样一个困惑,那就是当同一个 location 配置块使用了多个 Nginx 模块的配置指令时,这些指令的执行顺序很可能会跟它们的书写顺序大相径庭.于是许多人选择了 ...
- linux学习方法之六
相信不少想学习linux的新手们正愁不知道看什么linux学习教程好,下面小编给大家收集和整理了几点比较重要的教程,供大家学习,如需想学习更多的话,可到wdlinux学堂寻找更多教程. 1.linux ...
- Problem "g++" ("gcc") not found in PATH [ in omnet++ ] ---- 关于OMNeT++软件使用问题
出现的问题就像下面这样: 解释一下我出现这种情况的背景: 1. 首先安装好了OMNeT++软件,关于OMNeT++软件是否安装成功详见另一篇文章 OMNeT++安装教程 2. 也安装好了GCC编译环境 ...
- Java面向对象面试案例
- 网络配置——Linux运维基础
今天把Linux的网络配置总结了一下,尽管并不难可是是个比較重要的基础.然后我也不知到自己以后是否会做运维,可是我知道自己比較喜欢刨根问底.还有就是我很珍惜我以前掌握过的这些运维的技能.今天突然间问自 ...
- [置顶] viewPager控制滑动速度和时间
遇到如下问题:viewpager滑动时如果想跳过很多条直接到最后一条,中间会黑屏.黑屏是因为中间的view没有加载出来的缘故. stackOverflow上看到的解决方案,在这里记录一下, publi ...
- 【最大流,二分图匹配】【hdu2063】【过山车】
题意:裸的求二分图匹配 建立一个源点 连向一边所有的点 容量为1; 另外一边点都连向汇点 容量为1; 二分图的边容量也为1 源点汇点求一遍最大流即可 #include <cstdio> ...
- 从头开始-06.C语言中预处理指令
预处理指令 不带参数的宏定义: 格式: #define 宏名 值 作用:提高代码的可读性 在程序编译前把所有出现宏名标示的位置都替换为定义宏的时候,宏名后面的值 带参数的宏定义 格式 #define ...

