一、初识数据绑定

WPF(Windrows Presentation Foundation)数据绑定提供了一种简单而持续的方式去与数据交互并将其呈现。元素可以通过各种形式的数据源以CLR(common language runtime)对象和xml对象如Button、ListBox、ListView等方式与数据联系起来。
数据绑定建立了在应用UI和业务逻辑之间的一种联系。一旦数据绑定成功,当数据改变值的时候,与数据绑定的元素会将其值自动显示出来。
以下将介绍如何构建数据绑定。

二、明确数据源

有多种方法去明确绑定的数据源。当你在同一源上绑定多个属性的时候,在父元素上使用DataContext属性行之有效。然而有时,在单个对象逐一声明绑定的数据源更为合适。如

<DockPanel.Resources><c:MyData x:Key="myDataSource"/>
</DockPanel.Resources>
<Button Width="150" Height="30"Background="{Binding Source={StaticResource myDataSource},Path=ColorName}">I am bound to be RED!</Button>

三、明确值所在的路径

如果你绑定的数据源是一个对象,你可以用Path属性去明确所绑定的值。如果绑定的是xml数据,你可以使用XPath属性来明确绑定的值。在有些情况下,即使你使用xml对象用Path属性来实现绑定也许更便捷。比如,如果你想获取返回的XmlNode对象的Name属性,你可以使用Path属性而不是XPath属性。

<ListBox ItemsSource="{Binding}"IsSynchronizedWithCurrentItem="true"/>

四、Binding及BindingExpression

Binding类在声明Binding时是一个高级的类,它提供了很多可供你明确绑定特征的属性。与此相关的一个类——BindingExpression,它保持了源与目的对象之间的联系。一个Binding对象包含了可在一些binding表达式中传递的信息。

//make a new sourceMyData myDataObject = new MyData(DateTime.Now);      Binding myBinding = new Binding("MyDataProperty");myBinding.Source = myDataObject;myText.SetBinding(TextBlock.TextProperty, myBinding);

五、数据模板

Data Templating 允许数据以定义好的模板形式呈现:

<DataTemplate DataType="{x:Type src:AuctionItem}"><Border BorderThickness="1" BorderBrush="Gray"Padding="7" Name="border" Margin="3" Width="500"><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="20"/><ColumnDefinition Width="86"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Polygon Grid.Row="0" Grid.Column="0" Grid.RowSpan="4"Fill="Yellow" Stroke="Black" StrokeThickness="1"StrokeLineJoin="Round" Width="20" Height="20"Stretch="Fill"Points="9,2 11,7 17,7 12,10 14,15 9,12 4,15 6,10 1,7 7,7"Visibility="Hidden" Name="star"/><TextBlock Grid.Row="0" Grid.Column="1" Margin="0,0,8,0"Name="descriptionTitle"Style="{StaticResource smallTitleStyle}">Description:</TextBlock><TextBlock Name="DescriptionDTDataType" Grid.Row="0" Grid.Column="2" Text="{Binding Path=Description}" Style="{StaticResource textStyleTextBlock}"/><TextBlock Grid.Row="1" Grid.Column="1" Margin="0,0,8,0"Name="currentPriceTitle"Style="{StaticResource smallTitleStyle}">Current Price:</TextBlock><StackPanel Grid.Row="1" Grid.Column="2" Orientation="Horizontal"><TextBlock Text="$" Style="{StaticResource textStyleTextBlock}"/><TextBlock Name="CurrentPriceDTDataType" Text="{Binding Path=CurrentPrice}" Style="{StaticResource textStyleTextBlock}"/></StackPanel></Grid></Border><DataTemplate.Triggers><DataTrigger Binding="{Binding Path=SpecialFeatures}"><DataTrigger.Value><src:SpecialFeatures>Color</src:SpecialFeatures></DataTrigger.Value><DataTrigger.Setters><Setter Property="BorderBrush" Value="DodgerBlue" TargetName="border" /><Setter Property="Foreground" Value="Navy" TargetName="descriptionTitle" /><Setter Property="Foreground" Value="Navy" TargetName="currentPriceTitle" /><Setter Property="BorderThickness" Value="3" TargetName="border" /><Setter Property="Padding" Value="5" TargetName="border" /></DataTrigger.Setters></DataTrigger><DataTrigger Binding="{Binding Path=SpecialFeatures}"><DataTrigger.Value><src:SpecialFeatures>Highlight</src:SpecialFeatures></DataTrigger.Value><Setter Property="BorderBrush" Value="Orange" TargetName="border" /><Setter Property="Foreground" Value="Navy" TargetName="descriptionTitle" /><Setter Property="Foreground" Value="Navy" TargetName="currentPriceTitle" /><Setter Property="Visibility" Value="Visible" TargetName="star" /><Setter Property="BorderThickness" Value="3" TargetName="border" /><Setter Property="Padding" Value="5" TargetName="border" /></DataTrigger></DataTemplate.Triggers>
</DataTemplate>

转载于:https://www.cnblogs.com/jscitlearningshare/p/4490776.html

C#探秘系列(八)WPF数据绑定相关推荐

  1. 一起谈.NET技术,WPF 基础到企业应用系列5——WPF千年轮回2

    一,摘要 首先很高兴这个系列能得到大家的关注和支持,前端时间身体状况不适,所以暂停了更新,对此表示非常抱歉,以后会逐渐加快进度,不过由于这是一个很长的系列,我也想把它写好,所以以后也会慢慢来,在这个系 ...

  2. WPF 基础到企业应用系列2——WPF前世今生

    1.开篇前言       很多时候了解一项新技术的历史和趋势往往比这项技术的本身价值还要重要.WPF作为一项新技术(已经三年多了,或者应该叫老技术了),我们都有必要了解它的来龙去脉,尤其是公司的CTO ...

  3. WPF 基础到企业应用系列5——WPF千年轮回 续前缘

    一,摘要 首先很高兴这个系列能得到大家的关注和支持,前端时间身体状况不适,所以暂停了更新,对此表示非常抱歉,以后会逐渐加快进度,不过由于这是一个很长的系列,我也想把它写好,所以以后也会慢慢来,在这个系 ...

  4. 【×××系列八】Dynamic Multipoint *** for IPv6 详解

    [×××系列八]Dynamic Multipoint *** for IPv6 详解 一.前言 由于涉及IPV6加密,所以根据思科标准此次配置使用思科7200系列高级企业版IOS (详情参考我的上一篇 ...

  5. 【深入浅出MyBatis系列八】SQL自动生成插件

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 深入浅出MyBatis系列 [深入浅出MyBatis系列一]MyBatis入门 [深入浅出MyBatis系列二]配置 ...

  6. WPF数据绑定(1-简单数据绑定)

    2019独角兽企业重金招聘Python工程师标准>>> 附WPF书籍推荐: 1.不要为书籍经销商的炒作蒙蔽,国内翻译的<WPF揭秘>被褒扬成经典,其实我认为该书浅尝则止, ...

  7. WPF and Silverlight 学习笔记(二十):WPF数据绑定概述

    WPF数据绑定为应用程序提供了一种表示数据和与数据交互的简单而又一致的方法.元素能够以公共语言运行库 (CLR) 对象和 XML 的形式绑定到各种数据源中的数据. 一.数据绑定的基本概念: 数据绑定涉 ...

  8. 数学之美 系列八-- 贾里尼克的故事和现代语言处理

    数学之美 系列八-- 贾里尼克的故事和现代语言处理 读者也许注意到了,我们在前面的系列中多次提到了贾里尼克这个名字.事实上,现代语音识别和自然语言处理确实是和它的名字是紧密联系在一起的.我想在这回的系 ...

  9. WPF快速入门系列(6)——WPF资源和样式

    WPF快速入门系列(6)--WPF资源和样式 一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一 ...

  10. information_schema系列八(事物,锁)

    information_schema系列八(事物,锁) 今天我们主要看一下MySQL information_schema里面的关于innodb的锁和事物的两三个系统表: 看一下锁对应的sql: se ...

最新文章

  1. bootloader烧写
  2. SpringMVC_数据校验
  3. Repeater嵌套绑定Repeater[转]
  4. vCenter6.0配置二:配置HA群集
  5. 程序员面试100题之五:二叉树两个结点的最低共同父结点
  6. Java项目出现的问题01----学习
  7. git add * 提示warning: LF will be replaced by CRLF in 解决办法
  8. HTML5 API详解(7):link prefetch提升加载速度,优化体验
  9. 图论 —— 生成树 —— 最小生成树 —— Kruskal
  10. python从其他文件导入模块_Python模块可以使用其他文件的导入吗?
  11. 企业会计准则2020版pdf_2020年下半年CATTI三级笔译中译英真题+参考答案+原文件汉英对照PDF版...
  12. OpenCV之图像梯度(笔记11)
  13. 初学Reporting Service2008
  14. NUC1014 排版题.输出排列成菱形的字母【打印图案】
  15. ZZULIOJ:1000: 从今天开始入坑C语言
  16. opencv28:分水岭算法的图像分割
  17. Confluence 6 教程:空间高手
  18. 特别详细的数据中心运维管理方案
  19. 淘宝旺旺号转userid 或 uid 接口与方法
  20. 艾永亮:酒店浮沉录,睡不明白的生意经

热门文章

  1. Python群机器人发送城市天气情况
  2. 安装MySQL数据库无法启动服务的完美解决办法
  3. Vue-CLI and Leaflet (9): 点聚合 Leaflet.markercluster
  4. OpenGL入门笔记(六)
  5. python程序编译成exe格式
  6. Android五天乐(第三天)ListFragment与ViewPager
  7. angular分页插件tm.pagination 解决触发二次请求的问题
  8. 统治世界的十大算法(转)
  9. 限制车间备料方式更改
  10. 理解JavaScript原型