WPF系列——简单绑定学习
1. 绑定到元素对象.(实际项目中用处不大)
界面上两个关联的控件之间绑定,比如一个TextBlock 的FontSize和一个Slider 的Value绑定:
<Slider Name="sliderFontText" Minimum="1" Maximum="100" Value="10"/>
<TextBox Name="txtValue" Width="200"
Text="{Binding ElementName=sliderFontText, Path=Value,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/>
Text的内容就是new了一个Binding对象,设置ElementName,Path等是绑定的属性值.
XAML对应的C#代码:
Binding binding = new Binding();
binding.ElementName = "sliderFontText";
binding.Path = new PropertyPath("Value");
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
binding.Mode = BindingMode.TwoWay;
txtValue.SetBinding(TextBox.TextProperty, binding);
删除绑定:
BindingOperations.ClearBinding(txtValue, TextBox.TextProperty);
绑定后属性的操作,如删除绑定,获取控件绑定对象,都可以使用System.Windows.Data.BindingOperations的静态方法.
|
名称 |
说明 |
|
OneWay |
源属性 -> 目标属性(源变化引发目标变化) |
|
TwoWay |
源属性 <-> 目标属性(源变化引发目标变化且目标变化也引发源变化) |
| OneTime |
首次执行 源属性 -> 目标属性,后面所有变化忽略(除非显示调用BindingExpress.UpdateTarget()或者重新绑定完全不同的对象 |
|
OneWayToSource |
和OneTime绑定方式相反 |
| Default |
依赖绑定目标属性 |
UpdateSourceTrigger枚举值介绍:
|
名称 |
说明 |
|
PropertyChanged |
目标属性变化 -> 立即更新源 |
|
LostFocus |
目标属性变化 + 目标失去焦点 -> 更新源 |
|
Explicit |
调用BindingExpression.UpdateSource() -> 更新源 |
|
Default |
大部分为PropertyChanged,Textbox.Text是LostFocus |
2. 绑定非界面元素
1. 绑定静态类的静态属性(系统预定义和自定义方法一致,这里演示一个自定义):
XAML(c是 命名空间WPFDemo的别名):
<Button Content="{Binding Source={x:Static c:MyRes.Name}}"/>
C#:
namespace WPFDemo
{
public static class MyStaticRes
{
public static string Name { get { return "返回的Name"; } }
}
}
2.绑定一般类的一般属性
XAML:首先需要新建一个资源对象,
创建资源对象:
<Window.Resources>
<c:MyRes x:Key="customRes" Name="自定义资源文本"></c:MyRes>
</Window.Resources>
XAML绑定:
<Button Content="{Binding Source={StaticResource customRes},Path=Name}"/>
C#:
namespace WPFDemo
{
public class MyRes
{
public string Name { get; set; }
}
}
3. 相对绑定
XAML(这里将StackPanel的Name绑定到Button的Content属性中):
<StackPanel x:Name="LayoutRoot">
<Button
Content="{Binding Path=Name, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackPanel}}}"/>
</StackPanel>
RelativeSource 的Model枚举值值:
| 名称 | 说明 |
| Self | 绑定自己的另外一个属性 |
| FindAncestor | 绑定到父元素,需要设置父元素类型AncestorType和父元素层次AncestorLevel(默认为1) |
| PreviousData | 绑定到数据绑定列表的前一项 |
| TemplateParent | 绑定到应用模板的元素 |
<Button Content="{Binding Path=Name}" DataContext="{Binding Source={StaticResource myRes}}"/>
或者
<StackPanel Name="MainLayout" DataContext="{Binding Source={StaticResource myRes}}">
<Button Content="{Binding Path=Name}" />
</StackPanel>
|
属性 |
含义 |
|
ElementName |
是指绑定的源元素(这里一般指界面元素) |
|
Path |
源元素的绑定关联属性 |
|
UpdateSourceTrigger |
更新绑定属性的时机 |
|
Model |
更新绑定的方式 |
| Source | 提供数据的引用 |
| RelativeSource | 使用一个RelativeSource对象指向源对象,主要是相对数据源绑定使用 |
| DataContext | 最重要的绑定,没有Source或者RelativeSource,WPF就按照元素树向上查找DataContext属性,并使用第一个非空的DataContext属性 |
到这里,基本的Banding就复习完了,这里有一个体会就是,xaml有时候会忘记语法的写法,其实XAML中也是由一个一个的对象组成,组成方式时New一个一个的对象,实例化方式时: {对象类 属性1=XX, 属性2=XX}.
本文Demo项目下载:http://files.cnblogs.com/files/zhaoxixi/WPFDemo.rar
WPF系列——简单绑定学习的更多相关文章
- 【WPF系列】基础学习-XAML
引言 WPF框架中已经提到,WPF框架提供XAML基本服务.WPF中XAML的引入向开发者提供UI设计和代码分离的编程型.XAML是WPF中提出的一个具有重要意义的新技术,基本涉及WPF中所有UI开发 ...
- 【WPF系列】基础学习-WPF设计模式概览
引言 “设计模式”这个让程序员提起来就“酷”的东东,着实让让初学设计模式的programer自我陶醉一番.太多的经历,告诉我们“凡事都要个度,要学会适可而止”,否则过犹不及.“设计模式”也一样,切莫为 ...
- 【WPF系列】基础学习-WPF架构概览
引言 WPF从.net framewok3.0加入以来,经历了很多跟新.每次更新都给用户带来了新的功能或者优化性能.下面我们首先看下WPF再.netFramework中的位置,接着介绍下WPF的架构框 ...
- [WPF系列]-DataBinding 绑定计算表达式
Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth, Converter={Stat ...
- [WPF系列]从基础起步学习系列计划
引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...
- WPF中DataGrid的ComboBox的简单绑定方式(绝对简单)
在写次文前先不得不说下网上的其他wpf的DataGrid绑定ComboBox的方式,看了之后真是让人欲仙欲死. 首先告诉你一大堆的模型,一大堆的控件模板,其实或许你紧紧只想知道怎么让combobox怎 ...
- WPF系列(1)WPF和XAML基础
终于下定决心开始更新WPF一个系列的文章,这里主要是出于两个目的,一是自己对所学的知识有一个系统的总结,二十希望能对其他人有些帮助,如果您觉得我写的不好,欢迎提意见. 那么既然我要开始写WPF,那我们 ...
- WPF系列教程——(一)仿TIM QQ界面 - 简书
原文:WPF系列教程--(一)仿TIM QQ界面 - 简书 TIM QQ 我们先来看一下TIM QQ长什么样,整体可以将界面分为三个部分 TIM QQ 1. 准备 阅读本文假设你已经有XAML布局的基 ...
- WPF系列 —— 控件添加依赖属性(转)
WPF系列 —— 控件添加依赖属性 依赖属性的概念,用途 ,如何新建与使用.本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用. 先上TimePicker的一个效果图. 概念 ...
随机推荐
- Dubbo版本升级
一.背景 早期内部使用的是当当网fork的Dubbox,由于现在Dubbo又开始重新维护,而且阿里将其捐献给了Apache,并成为了Apache的顶级项目.因此dubbo版本升级到2.7.1势在必行. ...
- 手贱重置了mysql密码,导致登陆不进去的解决办法
上午手残,重置了下MySQL的密码,导致用命令登陆不进去 由于版本的问题,导致网上的方法都不可用 折腾了一上午,摸索+参考官方文档,终于搞定 利用--init-file 第一步,关掉系统服务 ...
- SpringBoot2+Druid+JdbcTemplate+MySql实现增删改查
1.配置pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- 【原创】C++STL multiset
资料来源:官方文档 multiset是一个按照特定排序储存元素的容器,多个元素可以有相同的值.元素的值即为其本身的键值.multiset中的值无法修改,可插入删除.常用于实现二叉树. 定义一个mult ...
- [转帖]Chrome用户请尽快更新:谷歌发现两个严重的零日漏洞
Chrome用户请尽快更新:谷歌发现两个严重的零日漏洞 https://news.cnblogs.com/n/647075/ 强烈建议:Chrome 用户请尽快升级浏览器!在谷歌今天发布的紧急补丁程序 ...
- Hibernate-validator数据验证
前言 数据效验工作在开发工作中,是非常重要的,保证数据的正确性,可靠性,安全性.不仅在前端进行效验,还要在后台继续进行效验. 前端做验证只是为了用户体验,比如控制按钮的显示隐藏,单页应用的路由跳转等等 ...
- Spring Cloud初认识
一.MicroService基本描述 微服务(MicroService)架构产生的原因:解决单体应用框架的缺点. 单体应用(Monolith)框架:所有的代码及功能都包含在一个WAR包中的项目组织方式 ...
- PB 之多行标题报表
第一种 1.添加一个text,将背景色选为非透明色:position中的layer,选为foreground,这样就可以拖动列宽了 2.在position属性标签页的width里,点右 ...
- vue+element树组件 实现树懒加载
本文连接https://www.cnblogs.com/aknife/p/11709255.html 一.页面样式 二.数据库 三.前端页面代码 <template> <el-tre ...
- Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE
删除logs文件夹日志即可