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的静态方法.

   BandingModel枚举值介绍:

名称

说明

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 绑定到应用模板的元素
     4.DataContext绑定
<Button Content="{Binding Path=Name}" DataContext="{Binding Source={StaticResource myRes}}"/>

或者

<StackPanel Name="MainLayout" DataContext="{Binding Source={StaticResource myRes}}">
<Button Content="{Binding Path=Name}" />
</StackPanel>
    Binding中属性介绍

属性

含义

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系列——简单绑定学习的更多相关文章

  1. 【WPF系列】基础学习-XAML

    引言 WPF框架中已经提到,WPF框架提供XAML基本服务.WPF中XAML的引入向开发者提供UI设计和代码分离的编程型.XAML是WPF中提出的一个具有重要意义的新技术,基本涉及WPF中所有UI开发 ...

  2. 【WPF系列】基础学习-WPF设计模式概览

    引言 “设计模式”这个让程序员提起来就“酷”的东东,着实让让初学设计模式的programer自我陶醉一番.太多的经历,告诉我们“凡事都要个度,要学会适可而止”,否则过犹不及.“设计模式”也一样,切莫为 ...

  3. 【WPF系列】基础学习-WPF架构概览

    引言 WPF从.net framewok3.0加入以来,经历了很多跟新.每次更新都给用户带来了新的功能或者优化性能.下面我们首先看下WPF再.netFramework中的位置,接着介绍下WPF的架构框 ...

  4. [WPF系列]-DataBinding 绑定计算表达式

            Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth, Converter={Stat ...

  5. [WPF系列]从基础起步学习系列计划

    引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...

  6. WPF中DataGrid的ComboBox的简单绑定方式(绝对简单)

    在写次文前先不得不说下网上的其他wpf的DataGrid绑定ComboBox的方式,看了之后真是让人欲仙欲死. 首先告诉你一大堆的模型,一大堆的控件模板,其实或许你紧紧只想知道怎么让combobox怎 ...

  7. WPF系列(1)WPF和XAML基础

    终于下定决心开始更新WPF一个系列的文章,这里主要是出于两个目的,一是自己对所学的知识有一个系统的总结,二十希望能对其他人有些帮助,如果您觉得我写的不好,欢迎提意见. 那么既然我要开始写WPF,那我们 ...

  8. WPF系列教程——(一)仿TIM QQ界面 - 简书

    原文:WPF系列教程--(一)仿TIM QQ界面 - 简书 TIM QQ 我们先来看一下TIM QQ长什么样,整体可以将界面分为三个部分 TIM QQ 1. 准备 阅读本文假设你已经有XAML布局的基 ...

  9. WPF系列 —— 控件添加依赖属性(转)

    WPF系列 —— 控件添加依赖属性 依赖属性的概念,用途 ,如何新建与使用.本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用. 先上TimePicker的一个效果图. 概念 ...

随机推荐

  1. LumiSoft 邮件操作删除(无法删除解决方法)

    最近在用 LumiSoft  进行邮件读取,然后操作相关附件邮件使用的是qq邮箱,读取后进行移除,但是怎么都移除不了 后来咨询了官方客服,原来是设置不对 需要 取消掉 X禁止收信软件删信 (仅对 PO ...

  2. 2017ACM/ICPC广西邀请赛 1005 CS Course

    CS Course Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  3. 【scratch3.0教程】2.2 魔力手环

    编程前的准备 在设计一个作品之前,必须先策划一个脚本,然后再根据脚本,收集或制作素材(图案,声音等)接着就可以启动Scratch,汇入角色,舞台,利用搭程序积木的方式编辑程序,制作出符合脚本的动画或游 ...

  4. LOJ6587 WF2019 交通堵塞 CRT、bitset

    传送门 首先设\(P = lcm(r_i + g_i)\),因为\(P \mid 2019!\),所以在\([0,2019!]\)里随机实数相当于在\([0,2019!)\)随机实数,相当于在\([0 ...

  5. c# NPOI文件操作

    public static Byte[] RenderDataToExcel<T>(List<T> SourceList, List<String> filter) ...

  6. Python爬虫快速上手教程

    1 这个是什么        整理Python中requests常用的API 2 代码 from bs4 import BeautifulSoup import requests import re ...

  7. git重置账号密码

    1.打开控制面板(快捷打开win+R,输入control) 2.点击打开用户账户 3.点击凭据管理器 4.点击windows凭据删除你的git凭据即可

  8. WebApi接收接收日期格式参数时,日期类型(2019-10-08T16:00:00.000Z)后台接收时间少8小时问题

    前端使用的是elementui的日期控件,将日期格式的数据提交到webapi后台时,接收到的日期格式少了8小时,这个原因是由于时区引起的,应该在WebApiConfig进行配置转成本地时间,解决少8小 ...

  9. Java Web 深入分析(11) JVM 体系结构与工作方式

    jvm体系 jvm简介 java virtual machine jvm体系详解 jvm工作机制 虚拟机怎么执行代码 jvm为何基于栈 执行引擎 执行引擎过程 java调用栈 总结

  10. ColdFusion 编写WebService 示例

    1.开发 Web Services,编写cfcdemo.cfc组件,代码如下: <cfcomponent style ="document" namespace = &quo ...