简单元素绑定

  前面讲依赖项属性的时候说过,依赖项具有内置的更改通知的支持,依赖项属性的一个特性就是数据绑定本章谈谈数据绑定。

  简单第说,数据绑定是一种关系, 该关系告诉WPF从源对象提取一些信息,并用这些信息设置目标对象的属性。

  目标属性始终是依赖项属性,通常位于WPF元素中—毕竟,WPF数据绑定的最终目标是在用户界面中显示一些信息。然而,源对象可以是任何内容,从另一个WPF元素乃至ADO.NET数据对象或您自行创建的纯数据对象。

  下面先说说元素到元素的绑定:

 元素到元素的绑定,源对象是WPF元素而且源属性是依赖项属性。

绑定表达式

<Slider x:Name="slider" HorizontalAlignment="Left" Margin="72,38,0,0" VerticalAlignment="Top" Width="223" Value="50" Maximum="100"/>
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="72,83,0,0" TextWrapping="Wrap" Text="Test Text" VerticalAlignment="Top" FontSize="{Binding ElementName=slider,Path=Value}"/>

  将Slider滑块的Value值绑定到TextBlock的FontSize上。

  数据绑定表达式使用XAML标记扩展,因为正在创建System.Windows.Data.Bingding类的一个实例,所以绑定表达式以单词Bingding开头。尽管可采用多种方式配置Binging对象,但本例中需要设置两个属性:ElementName属性(指示源元素)和Path属性(指示源元素中的属性)

  之所以使用名称Path而不是Property,是因为Path可能指向属性的属性(FontFamily.Source),也可能指向属性使用的索引器(如Content.Children[0]).可构建具有多层级层次的路径,使其指向属性的属性的属性。

  

绑定模式

  数据绑定的一个特性是目标会被自动更新,而不考虑源的修改方式。在这个示例中,源只能通过一种方式进行修改——通过用户与滑动条上滑块进行的交互。

  添加一个按钮,然后设置字体的大小

private void button_Click(object sender, RoutedEventArgs e)
{
    textBlock.FontSize = 30;
}

设置新的字体后,滑动条的位置未相应地更新。且移动滑动条的滑块,文本框的字体大小也不发生改变,说明绑定也失效了。

<Slider x:Name="slider" HorizontalAlignment="Left" Margin="72,38,0,0" VerticalAlignment="Top" Width="223" Value="50" Maximum="100"/>
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="72,83,0,0" TextWrapping="Wrap" Text="Test Text" VerticalAlignment="Top" FontSize="{Binding ElementName=slider,Path=Value,Mode=TwoWay}"/>

将TextBlock的绑定的模式设置为TwoWay,这样上面的字体设置后补也会破坏绑定关系。

绑定的Mode属性可以设置绑定属性的模式,下面列举了Mode的枚举值

1. OneWay

  当源属性变化时更新目标属性

2. TwoWay

  当源属性变化时更新目标属性,并且当目标属性变化时更新源属性

3. OneTime

  最初根据源属性值设置目标属性。然而,其后的所有改变都会被忽略,通常,如果源属性不会变化,可使用这种模式降低开销

4. OneWayToSource

  与OneWay类型类似,但方向相反。当目标属性变化时更新源属性,但目标属性永远不会被更新,

  此项使用主要用于设置非依赖项属性的属性。前面已经说过,绑定表达式只能用于设置依赖项属性。但通过使用OneWayToSource模式,可克服这一限制.但前提是提供数值的属性本身是依赖项属性。

5. Defalut

  此类绑定依赖于目标属性,既可以是双向的(对于用户可以设置的属性,如TextBox.Text属性),也可以是单向的(对于所有其他属性)。除非明确指定了另一种模式。否则所有绑定都使用该方法。

使用代码绑定

  

bingding.Source = slider;
bingding.Path = new PropertyPath("Value");
bingding.Mode = BindingMode.TwoWay;TextBlock1.SetBinding(TextBlock.FontSizeProperty, bingding);

绑定更新

  如果将TextBlx.Text属性绑定到TextBlock.FontSize属性,还存在一个问题。当通过在文本框中输入内容改变显示的字体尺寸时,什么事情也不会发生直到使用Tab键将焦点转移动另一个控件,才会改变。这一行为和在滑动控件中看到的行为不同。滑动条的滑块滑动时会应用新的字体尺寸,而不必使用Tab键转移焦点

  这种行为由Bingding.UpdateSourceTrigger属性控制,TextBox的默认用的UpdateSourceTrigger.LostFocus方式从目标向源进行更新的例子。

  UpdateSourceTigger枚举值如下:

PropertyChanged: 当目标属性发生变化时立即更新源

     LostFocus: 当目标属性发生变化并且目标丢失焦点时更新源

      Explict: 除非调用BingdingExpression.UpdateSource()方法,否则无法更新源

     Default:   根据目标属性的元数据确定更新行为,大多数属性的默认行为是PropertyChanged,但TextBox.Text属性的默认行为是LostFocus

绑定延迟

  在特殊情况下,可使用Bingding对象的Delay属性.等待数毫秒,之后再提交更改

  下面是文本框示例的修改版本,会在用户停止输入500毫秒后更新源对象

  

<TextBlock x:Name="TextBlock1" HorizontalAlignment="Left" Margin="72,83,0,0" TextWrapping="Wrap" Text="Test Text" VerticalAlignment="Top" FontSize="{Binding ElementName=slider,Path=Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Delay=500}"/>

    

时间: 2024-08-08 09:40:23

简单元素绑定的相关文章

chrome下教你如何查看元素绑定的事件

说在开头 在前端调试的时候,我们经常遇到这一个问题,要想审查特定元素上绑定的事件; 通常来讲,在chrome开发者工具有一栏Event listeners可以查看特定元素上绑定的事件 如下图所示: 这里我做了一个测试,不管是使用Dom0级规范中 listeners均能显示所绑定事件类型,并且点击对应js文件后,能正确指向对应的事件处理函数. 更加强大的是,如果我们给其父元素绑定事件,由于事件冒泡的关系,查看子元素的Event listeners中也能看到该事件: 当然查看父元素的Event li

七,元素绑定

数据绑定是一种关系,该关系告诉WPF从一个源对象提取一些信息,并使用这些信息设置目标对象的属性,目标属性总是依赖项属性,然而,源对象可以是任何内容. 源对象是WPF元素并且源属性是依赖项属性的数据绑定,这是最简单的数据绑定. 绑定表达式 如下XAML示例,数据绑定表达式使用XAML扩展标记,因为绑定表达式以Binding开头,所以它实际上是创建了一个System.Windows.Data.Binding类实例,且设置了它的两个属性:ElementName属性(指示源元素)和Path属性(指示源元

WPF 元素绑定

1.什么是数据绑定数据绑定是一种关系,WPF程序从源对象中提取一些信息,并根据这些信息设置目标对象的属性,目标属性作为依赖项属性.源对象可以是任何内容,可以是另一个wpf内容,甚至是自行创建的纯数据对象. 2.简单的单绑定 将一个元素绑定到另一个元素,第一个例子,是将将一个Slider控件和TextBlock控件绑定.ElementName表示源对象的名字,Path表示源元素的属性.需要使用花括号括起来. <Grid> <Slider Name="sliderFontSize&

WPF学习系列之六 (元素绑定)

元素绑定 简单地说,数据绑定是一种关系,该关系告诉WPF从一个源对象提取一些信息,并使用这些信息设置目标对象的属性.目标属性总是依赖属性,并且通常位于WPF元素中. 一.将元素绑定到一起 <Window x:Class="StudyWPF.元素绑定"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schem

【JS 设计模式 】门面模式之DOM元素绑定事件

门面模式的作用:一是简化类的接口,通过用一个接口(函数或方法)来封装复杂的逻辑代码从而客户端可以使用一个接口来调用它:二是消除类与使用它的客户代码之间的耦合,使客户代码和复杂的逻辑代码分离,也就是耦合: ?在何种情况下会使用:1)为一个复杂子系统提供一个简单接口.2)提高子系统的独立性.3)在层次化结构中,使用Facade模式定义系统中每一层的入口,使它们各尽其责. 用绑定事件来举例门面模式,IE浏览器和其它(火狐.谷歌)浏览器在对html元素绑定事件上是有区别的. ie绑定代码: var bu

WPF元素绑定

原文:WPF元素绑定 数据绑定简介:数据绑定是一种关系,该关系告诉WPF从源对象提取一些信息,并用这些信息设置目标对象的属性.目标属性是依赖项属性.源对象可以是任何内容,从另一个WPF元素乃至ADO.NET数据对象(如DataTable)或自行创建出数据对象.绑定用的是Binding类的一个实例,用的名称空间是:System.Windows.Data: 1.绑定表达式. 数据绑定表达式使用的是XAML标记扩展(因此具有花括号),用到的是System.Windows.Data.Bingding类的

WPF:元素绑定

到目前为止都在讨论如何链接两个元素的绑定.但在数据驱动的应用程序中,更常见的情况是创建从不可见的对象中提取数据绑定表达式.唯一的要求是希望显示的信息必须存储在公有的属性中.WPF数据绑定基础结构不能获取私有信息或共有字段. 当绑定到非元素对象时,需要放弃Binding.ElementName属性,并使用一下属性中的一个: Source:该属性是指向源对象的引用---换句话说,是提供数据的对象. RelativeSource:这是引用,使用RelativeSource对象指向源对象.有了这个附加层

【WPF学习】第二十九章 元素绑定——将元素绑定到一起

原文:[WPF学习]第二十九章 元素绑定--将元素绑定到一起 数据banding的最简单情形是,源对象时WPF元素而且源属性是依赖性属性.前面章节解释过,依赖项属性具有内置的更改通知支持.因此,当在源对象中改变依赖项属性的值时,会立即更新目标对象中的绑定属性.这正是我们所需要的行为--而且不必为此构建任何额外的基础结构. 为理解如何将一个元素绑定到另一个元素,下面创建一个简单的示例.该示例窗口包含了两个控件:一个Slider控件和一个具有单行文本的TextBlock控件.如果向右拖动滑动条上的滑

【WPF学习】第三十章 元素绑定——绑定到非元素对象

原文:[WPF学习]第三十章 元素绑定--绑定到非元素对象 前面章节一直都在讨论如何添加链接两个各元素的绑定.但在数据驱动的应用程序中,更常见的情况是创建从不可见对象中提取数据的绑定表达式.唯一的要求是希望显示的信息必须存储在公有属性中.WPF数据绑定数据结构不能获取私有信息或公有字段. 当绑定到非元素对象时,需要放弃Binding.ElementName属性,并使用以下属性中的一个: Source:该属性是指向源对象的引用--换句话说,是提供数据的对象. RelativeSource:这是引用