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. js arguments

    偶然碰见一个有意思的题 <script> var length = 10; function fn() { console.log( this.length ); // 10 } var ...

  2. 新手配置LNMP环境教程

    回顾一下这几天自己配置LNMP环境踩得坑,希望帮助更多人 前期准备:VMtool.Linux.Nginx.Mysql.PHP.cmake 版本如下:Centos6.nginx1.6.0.mysql5. ...

  3. 生信-使用NCBI进行目的基因的引物设计

    使用NCBI进行目的基因的引物设计 全文概述 利用生信工具进行目的基因的引物设计,使用了NCBI进行筛选与设计引物,使用 idtdna对筛选出的DNA进行检查.本文分享了如何筛选出高质量的基因引物,帮 ...

  4. AOP+Redis锁防止表单重复提交

    确保分布式锁同时满足以下四个条件 1.互斥性.在任意时刻,只有一个客户端能持有锁 2.不会发生死锁.即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁 3.具有容错性.只要 ...

  5. 在 Visual Studio 中部署 ASP.NET Core 应用

    另一篇:在 Docker 中手工部署 ASP.NET Core 应用 操作步骤 1. 安装 Docker For Windows(安装之前 Windows 需要 开启 Hyper-V 虚拟机功能 ) ...

  6. 06-switch语句

    switch语句 switch是一个条件语句,它是可以代替多个if else的常用方式 例子 package main import "fmt" func main() { a:= ...

  7. Python3定时器任务代码

    使用threading写的一个定时器任务demo: import time import sys import signal import datetime import threading #定时器 ...

  8. kubernetes 实践四:Pod详解

    本篇是关于k8s的Pod,主要包括Pod和容器的使用.Pod的控制和调度管理.应用配置管理等内容. Pod的定义 Pod是k8s的核心概念一直,就名字一样,是k8s中一个逻辑概念.Pod是docekr ...

  9. 基础数字电路的Verilog写法

    Verilog是硬件描述电路,我对此一直稀里糊涂,于是将锆石科技开发板附带的的一些基础数字电路Verilog程序整理记录下来,并且查看他们的RTL视图,总算有点理解了. 1.基本运算符 module ...

  10. Windows服务创建及发布

    二.创建Windows Service 1.新建一个Windows Service,并将项目名称改为“MyWindowsService”,如下图所示: 2.在解决方案资源管理器内将Service1.c ...