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

最新文章

  1. rsync permission denied created directories have no permissions
  2. HTML表单提交数据中application/x-www-form-urlencoded和multipart/form-data的区别
  3. 第五百八十一天 how can I 坚持
  4. Javascript Array.prototype.some()
  5. LInux挂载windows共享磁盘
  6. 201521123066 《Java程序设计》第三周学习总结
  7. JDK10安装配置详解
  8. solr的搜索
  9. 跨界!Omi 发布多端统一框架 Omip 打通小程序与 Web 腾讯开源 2月28日
  10. 什么是一致性Hash算法?
  11. bootstrap-treeview 如何实现全选父节点下所有子节点及反选
  12. Feature Extractor[inception v2 v3]
  13. 关于Nginx负载均衡的5种策略
  14. Mac NVM 配置
  15. 两个Inline-block元素不对齐
  16. Exploring the world of Android :: Part 1
  17. 关于overflow: hidden;的一个诡异问题
  18. normalizr实践使用(个人总结,仅供参考)
  19. List和数组的相互转化
  20. 【Html 学习笔记】第四节——框架

热门文章

  1. Kubernates之从pod中拷贝文件到宿主机
  2. Linq调试实时输出信息扩展方法(摘抄)
  3. ProtoStuff无法反序列化Deprecated注解成员问题记录
  4. js获取日期时间
  5. bzoj 4500 矩阵 题解
  6. golang - 映射 ini 配置文件
  7. [高清] 深入浅出Spring Boot 2.x.pdf + 代码
  8. java之hibernate之基于外键的双向一对一关联映射
  9. 转 如何在调用WCF服务之前弹出一个确认对话框
  10. 基于工作组消息队列高可用&amp;msmq-wcf故障