WPF数据绑定

数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知。当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件。

在绑定来源和绑定目标之间,可以使用Mode属性指定绑定的方法。Mode属性是System.Windows.Data.BindMode枚举类型的属性:

OneWay:源数据变更目标数据变更,反之不行

OneTime:仅在启动时更新

OneWayToSource:目标数据更新源数据更新,反之不行

TwoWay:源数据变更目标数据变更,反之可以

如果使用TwoWay绑定模式,当目标文本框对象发生变更时,变化不会立即被传到数据源,除非用户使当前控件失去焦点之后,否则源数据不会发生变更。可以通过设置Binding.UpdateSourceTrigger属性设置更新方式:

Default:绑定目标属性的默认UpdateSourceTrigger值。多数依赖项属性默认值为PropertyChanged,而Text属性则为LostFocus。这就是为什么文本框对象需要失去焦点才可以变更原数据。

ProertyChannged:当绑定目标属性更改时,立即更新绑定源。

LostFocus:当绑定目标元素失去焦点时,更新绑定源。

Explicit:仅在调用UpdateSource()方法时更新绑定数据源。

绑定元素属性

  1. <Window x:Class="WPFDemo.BindElementsDemo"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:WPFDemo"
  7. mc:Ignorable="d"
  8. Title="BindElementsDemo" Height="300" Width="300">
  9. <Window.Resources>
  10. <Style TargetType="TextBox">
  11. <Setter Property="Width" Value="200" />
  12. <Setter Property="Height" Value="20" />
  13. <Setter Property="Margin" Value="5" />
  14. </Style>
  15. </Window.Resources>
  16. <Grid ShowGridLines="True">
  17. <Grid.RowDefinitions>
  18. <RowDefinition /> <RowDefinition />
  19. <RowDefinition /> <RowDefinition />
  20. <RowDefinition /> <RowDefinition />
  21. <RowDefinition /> <RowDefinition />
  22. </Grid.RowDefinitions>
  23. <Grid.ColumnDefinitions>
  24. <ColumnDefinition />
  25. <ColumnDefinition />
  26. </Grid.ColumnDefinitions>
  27. <Label Grid.Column="0" Grid.Row="0" Margin="5" Content="源数据" />
  28. <Label Grid.Column="1" Grid.Row="0" Margin="5" Content="目标数据" />
  29. <!--使用OneWay绑定模式 源数据变更目标数据变更,反之不行-->
  30. <Label Grid.Row="1" Grid.Column="0" Content="OneWay Mode"></Label>
  31. <TextBox Grid.Row="1" Grid.Column="0" Name="txt1"></TextBox>
  32. <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding ElementName=txt1,Path=Text,Mode=OneWay}"></TextBox>
  33. <!--使用OneTime绑定模式 仅在启动时更新-->
  34. <Label Grid.Row="2" Grid.Column="0" Content="OneTime Mode"></Label>
  35. <TextBox Grid.Row="2" Grid.Column="0" Name="txt3"></TextBox>
  36. <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding ElementName=txt3,Path=Text,Mode=OneTime}"></TextBox>
  37.  
  38. <!--使用OneWayToSource绑定模式 目标数据更新源数据更新,反之不行-->
  39. <Label Grid.Row="3" Grid.Column="0" Content="OneWayToSource Mode"></Label>
  40. <TextBox Grid.Row="3" Grid.Column="0" Name="txt4"></TextBox>
  41. <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding ElementName=txt4,Path=Text,Mode=OneWayToSource}"></TextBox>
  42.  
  43. <!--使用TwoWay绑定模式 源数据变更目标数据变更,反之可以-->
  44. <Label Grid.Row="4" Grid.Column="0" Content="TwoWay Modem默认"></Label>
  45. <TextBox Grid.Row="4" Grid.Column="0" Name="txt2"></TextBox>
  46. <TextBox Grid.Row="4" Grid.Column="1" Text="{Binding ElementName=txt2,Path=Text,Mode=TwoWay}"></TextBox>
  47.  
  48. <!--使用TwoWay绑定模式调用UpdateSource时更新 源数据变更目标数据变更,反之可以-->
  49. <Label Grid.Row="5" Grid.Column="0" Content="TwoWay Modem 目标数据更改Explicit调用UpdateSource时更新"></Label>
  50. <TextBox Grid.Row="5" Grid.Column="0" Name="txt5"></TextBox>
  51. <TextBox Grid.Row="5" Grid.Column="1" Text="{Binding ElementName=txt5,Path=Text,Mode=TwoWay,UpdateSourceTrigger=Explicit}"></TextBox>
  52.  
  53. <!--使用TwoWay绑定模式失去焦点更新 源数据变更目标数据变更,反之可以-->
  54. <Label Grid.Row="6" Grid.Column="0" Content="TwoWay Modem 目标数据更改失去焦点时更新"></Label>
  55. <TextBox Grid.Row="6" Grid.Column="0" Name="txt6"></TextBox>
  56. <TextBox Grid.Row="6" Grid.Column="1" Text="{Binding ElementName=txt6,Path=Text,Mode=TwoWay,UpdateSourceTrigger=LostFocus}"></TextBox>
  57.  
  58. <!--使用TwoWay绑定模式立即更新 源数据变更目标数据变更,反之可以-->
  59. <Label Grid.Row="7" Grid.Column="0" Content="TwoWay Modem 目标数据更改立即更新"></Label>
  60. <TextBox Grid.Row="7" Grid.Column="0" Name="txt7"></TextBox>
  61. <TextBox Grid.Row="7" Grid.Column="1" Text="{Binding ElementName=txt7,Path=Text,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>
  62.  
  63. </Grid>
  64. </Window>

绑定元素多个属性

  1. <Window x:Class="WPFDemo.BindElemntsMulPropertyDemo"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:WPFDemo"
  7. mc:Ignorable="d"
  8. Title="BindElemntsMulPropertyDemo" Height="300" Width="500">
  9. <Grid>
  10. <Grid.RowDefinitions>
  11. <RowDefinition />
  12. <RowDefinition />
  13. <RowDefinition />
  14. <RowDefinition />
  15. </Grid.RowDefinitions>
  16. <Grid.ColumnDefinitions>
  17. <ColumnDefinition Width="Auto"/>
  18. <ColumnDefinition/>
  19. </Grid.ColumnDefinitions>
  20. <!--Slider设置字体大小-->
  21. <Label Grid.Row="0" Grid.Column="0" Content="字体大小" />
  22. <Slider Grid.Row="0" Grid.Column="1" Name="sliderFontSize" Margin="5" Minimum="8" Maximum="20" Value="10"/>
  23. <!--设置文本内容-->
  24. <Label Grid.Column="0" Grid.Row="1" Content="文本内容" />
  25. <TextBox Grid.Column="1" Margin="5" Grid.Row="1" Name="txtContent" Text="绑定多个属性值"/>
  26. <!--设置字体颜色-->
  27. <Label Grid.Column="0" Grid.Row="2" Content="字体颜色" />
  28. <ListBox Grid.Column="1" Grid.Row="2" Margin="5" Name="FontColor">
  29. <ListBoxItem Tag="Blue">Blue</ListBoxItem>
  30. <ListBoxItem Tag="Red">Red</ListBoxItem>
  31. <ListBoxItem Tag="Yellow">Yellow</ListBoxItem>
  32. </ListBox>
  33.  
  34. <TextBlock Grid.Column="0" Grid.ColumnSpan="2" Margin="5" Grid.Row="3" FontSize="{Binding ElementName=sliderFontSize,Path=Value}"
  35. Text="{Binding ElementName=txtContent,Path=Text}"
  36. Foreground="{Binding ElementName=FontColor,Path=SelectedItem.Tag}">
  37. </TextBlock>
  38. </Grid>
  39. </Window>

总结:陆陆续续将十天的“修炼”成果发布出来;说是十天修炼,实际从发布第一篇笔记开始到现在已经28天了4周整。时光匆匆,这些内容一共看了两遍,第一次只是看了一遍没有什么印象,第二次将所有的代码都敲了一遍,收获颇丰。笔记不仅可以方便以后进行查漏补缺,经过时间的沉淀还可以总结出自己的一套学习方法。再接再厉。

Stay Hungry Stay Foolish !

求知若饥 虚心若愚!

WPF 10天修炼 第十天- WPF数据绑定的更多相关文章

  1. WPF 10天修炼 第七天- WPF资源、样式、控件模板

    WPF资源 对象资源 WPF允许在XAML标记的任意位置定义资源.比如在特定的控件.窗口或应用程序级别定义资源,WPF资源系统提供的对象资源有如下好处: 1.  高效:使用对象资源可以在一个地方定义而 ...

  2. WPF 10天修炼 第四天- WPF布局容器

    WPF布局 WPF的窗口也就是Window类,是一个内容控件,该控件派生自ContentControl.内容控件有一个Content属性,该属性有一个限制,只能放置一个用户界面元素,或一个字符串.为了 ...

  3. WPF 10天修炼 第五天- 内容控件

    WPF内容控件 在WPF中,所有呈现在用户界面上的对象都称为用户界面元素.但是只有派生自System.Windows.Controls.Control类的对象才称为控件.内容控件通常是指具有Conte ...

  4. WPF 10天修炼 第八天 - 形状、画刷和变换

    图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System. ...

  5. WPF 10天修炼 第六天- 系统属性和常用控件

    WPF系统属性和常用控件 渐变的背景色 WPF中的前景色和背景色不同于传统Winform的设置,这些属性都是Brush类型的值.在XAML中,当为这些属性设置指定的颜色后将被转换为SolidColor ...

  6. WPF 10天修炼 第三天- Application全局应用程序类

    Application对象 当一个WPF应用程序启动时,首先会实例化一个全局唯一的Application对象,类似于WinForm下的Application类,用于控制整个应用程序,该类将用于追踪应用 ...

  7. WPF 10天修炼 第二天- XAML语言

    XAML是什么 XAML是一种与.NET CLR紧密集成的声明性UI标记语言.XAML中的对象元素对应到CLR中的类型或结构.XAML命名空间对应到CLR中类的命名空间,元素类型则对应到CLR中的类型 ...

  8. WPF 10天修炼 第一天- 入门

    简介 WPF技术基于DirectX,完美的整合了矢量图形.2D或3D绘图技术.文件及多媒体技术.WPF将开发人员和设计人员的职责清楚的分离,提供了一种声明编程语言XAML.同时Expression B ...

  9. WPF 10天修炼 第九天 - 几何图形

    几何图形 使用LineGeometry.RectangleGeometry.EllipseGeometry对象分别绘制直线.矩形.椭圆. 使用GeometryGroup可以绘制组合图形. <Wi ...

随机推荐

  1. 定时任务调度工作(学习记录 二)timer定时函数的用法

    schedule的四种用法: 1.schedule(task,time) 参数: task----所安排的任务 time----执行任务的时间 作用: 在时间等于或超过time的时候执行且仅执行一次t ...

  2. spring cloud配置注册中心显示服务的ip地址和端口

    1.在springcloud中服务的 Instance ID 默认值是: ${spring.cloud.client.hostname}:${spring.application.name}:${sp ...

  3. codeforces8A

    Train and Peter CodeForces - 8A Peter likes to travel by train. He likes it so much that on the trai ...

  4. Nginx从入门到实践(四)

    Nginx常见问题和排错经验,实践应用场景中的方法处理Nginx安全,常见的应用层安全隐患,复杂访问控制,Nignx的sql防注入安全策略,Nginx的整体配置,搭建合理Nginx中间件架构配置步骤. ...

  5. net core swagger接口

    net swagger接口 引用NuGet包 Install-Package Swashbuckle.AspNetCore //控制台 Microsoft.Extensions.PlatformAbs ...

  6. HTTP与HTTPS(转)

    一.什么是HTTP? 什么是HTTPS?  HTTP:(Hyper Text Transfer Protocol 超文本传输协议) HTTPS:(Hyper Text Transfer Protoco ...

  7. Nginx下配置SSL模块,支持https

    Http与Https的区别 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效 ...

  8. (十一)QPainter绘图, QPixmap,QImage,QPicture,QBitmap

    #include "widget.h" #include "ui_widget.h" #include <QPainter> #include &l ...

  9. Redis的删除机制、持久化 主从

    转: Redis的删除机制.持久化 主从 Redis的使用分两点: 性能如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存.这样,后面的请求就去缓存中读取 ...

  10. codeforces-1133 (div3)

    A.先全部化成分钟数,取平均数之后化成正常时刻. #include <map> #include <set> #include <ctime> #include & ...