• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > WPF绑定实例详解

WPF绑定实例详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了wpf控件详解,wpf界面设计实例,wpf项目开发实例,wpf mvvm实例,wpf实例教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文详细讲述了WPF绑定的用法,分享给大家供大家参考。具体用法分析如下:

1.WPF绑定使用的源属性必须是依赖项属性,这是因为依赖项属性具有内置的更改通知支持,元素绑定表达式使用了Xaml扩展标记,WPF绑定一个控件是使用Binding.ElementName,绑定非控件对象时使用Source,RelativeSource,DataContext属性(WPF特有,而非XAML),只能绑定对象的共有字段.
下边是部分Binding 属性名,完整列表参考 :http://msdn.microsoft.com/zh-cn/library/vstudio/ms750413.aspx

① Source:数据提供者
② RelativeSource:根据当前对象为基础,自动查找源并绑定
③ DataContext:如果未使用Source和RelativeSource,WPF就从当前控件开始在控件树种向上查找,并使用第一个非空的DataContext属性,可以在更高层次容器对象上设置DataContext,如下代码 Text 绑定到 Source属性,但未设置Text的绑定对象,会向上查找DataContext绑定的对象的Source属性
④ 示例代码:

<StackPanel DataContext="{X:Static SystemFonts.IconFontFamily}"> 
    <TextBox Margin="5" Text="{Binding Path=Source}">
    </TextBox> 
</StackPanel>
<TextBlock Margin="3" Name="lblSampleText" 
FontSize="{Binding ElementName=sliderFontSize,Path=Value Mode="TwoWay"}"
Text="{Binding ElementName=txtContent,Path=Text}" Foreground="{Binding ElementName=lstColors,Path=SelectedItem.Tag}" ></TextBlock>
</div>

也可是使用代码创建绑定:

Binding binding = new Binding();
 binding.Source = sliderFonSize;  
 binging.path=new PropertPath("Value") 
 binding.Mode=BindignMode.TwoWay;
 txt.SetBinding(TextBlock.FontSize,binding)
</div>

2.BindingMode的枚举值有:

① OneWay
② TwoWay
③ OneTime:根据源端属性值设置目标属性值,之后的改变会被忽略,除非调用BindingExpression.UpdateTarge方法
④ OneWayToSource:与OneWay类似,但方向相反,用于目标属性是非依赖项属性的情况
⑤ Default:默认值,根据目标属性确定绑定类型.依赖项属性都由一个元数据 FrameworkPropertyMetadata.BindsTwoWayByDefault用于标识oneway绑定还是twoway绑定

3.从目标到绑定源端数据更新时(binding mode为twoway或者onewaytosource),更新行为(什么时机更新)由Binding.UpdateSourceTrigger枚举属性控制,UpdateSourceTrigger的值有:

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

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

③ Explicit:除非调用BindingExpression.UpdateSource()方法,否则无法更新

④ Default:根据目标属性的元数据(FrameworkPropertMetadata.DefaulUpdateSourceTrigger)确定更新行为,大多数属性默认行为是PropertyChanged

4.MultiBinding:将多个对象绑定到一个控件,主要要使用StringFormat

<ListBox ItemsSource="{StaticResource MyData}"> 
<ListBox.ItemTemplate> 
<DataTemplate> 
<TextBlock>
<TextBlock.Text> 
<MultiBinding StringFormat="{}{0} -- Now only {1:C}!">
<Binding Path="Description"/> <Binding Path="Price"/> </MultiBinding> 
</TextBlock.Text> 
</TextBlock> 
</DataTemplate>
</ListBox.ItemTemplate> 
</ListBox>

</div>

5.ObjectDataProvider:从另一个类中获取信息,只用于数据查询,IsAsynchronous=true,可以使ObjectDataProvider在后台执行,这样即使发生异常不会影响绑定控件的显示:

<ObjectDataProvider x:Key="productsProvider" ObjectType="{x:Type local:StoreDB}"
MethodName="GetProducts"></ObjectDataProvider>
</div>

6.WPF中派生自ItemsControl的类都能显示列表,能够支持集合数据绑定的元素包括ListBox,ComboBox,ListView和DataGrid,Menu,Treeview,ItemsControl中有三个重要属性:

① ItemsSource: 指向一个集合,结合必须支持IEnumerable接口,该集合包含将在列表中显示的所有元素,但基本的IEnumerable接口只支持只读绑定,要使修改能直接反应到绑定的控件上需要使用ObservablCollection类
② DisplayMemberPath:确定用于显示的 对象的属性,如果未设置 则会显示对象的ToString()方法返回的值
③ ItemTemplates:接受一个数据模板,用于为每个项创建可视化外观

7.继承自IEnumerable接口的类型都支持绑定到列表形元素,大多数集合类没有继承INotifyCollectionChanged接口,WPF提供了一个使用INotifyCollectionChanged接口的集合,ObservableCollction类

8.将Grid绑定到lstProducts对象的SelectItem属性

<Grid DataContext="{Binding ElementName=lstProducts,Path=SelectedItem}">....</Grid>
</div>

9.绑定时,被绑定的数据对象可能还不存在(绑定控件对象时可以看该对象在xaml中是否已经定义),这时依然可以在Xaml中绑定对象类属性(Binding Path),然后在代码中生成数据对象后在与控件绑定

10.WPF列表控件提供了UI虚拟化(UI Virtualization)功能用于提高大列表的性能,UI虚拟化是列表仅为当前显示项创建容器对象的一种技术

11.数据验证:用于捕获非法数据

① ExceptionValidationRule验证:验证失败时,WPF会在绑定元素上将Validation.HasError设置为True,WPF自动将控件使用的模板切换到又Validation.ErrorTemplate定义的模板,创建包含错误细节的ValidationError对象,并加到Validation.Errors集合中,如果Binding.NotifyOnValidationError属性设置为True,WPF就会在控件上引发Validation.Error事件

② IDataErrorInfo类:在数据对象中引发错误,并且要在binding中设置DataErrorValidationRule验证规则,当修改了一个属性后,IDataErrorInfo中的字符串索引器,以属性名为Key对值进行验证。可以自定义验证类并响应验证错误

12.没有Path的Binding:Binding源本身就是数据且不需要Path来指明,如下绑定表示将Text绑定到字符串类型mystring,mystring本身就是数据.Path后为"."或者空表示绑定source本身:

<TextBlock Text="{Binding source={StaticResource ResourceKye=mystring},Path=.}">
</div>

相信本文所述对大家C#程序设计的学习有一定的借鉴价值。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • WPF绑定实例详解
  • 深入分析WPF客户端读取高清图片卡以及缩略图的解决方法详解

相关文章

  • 2017-05-28C#中Trim()、TrimStart()、TrimEnd()的用法介绍
  • 2017-05-28C#实现SQL批量插入数据到表的方法
  • 2017-05-28算法练习之从String.indexOf的模拟实现开始
  • 2017-05-28深入分析C#异步编程详解
  • 2017-05-28C#画笔Pen保存和恢复图形对象的设置方法
  • 2017-05-28C#警惕匿名方法造成的变量共享实例分析
  • 2017-05-28C#启动和停止windows服务的实例代码
  • 2017-05-28C# 操作符之三元操作符浅析
  • 2017-05-28C#枚举中的位运算权限分配浅谈
  • 2017-05-28C/C++ 传递动态内存的深入理解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C# URL短地址压缩算法及短网址原理解析
    • 探讨:关闭浏览器后,php脚本会不会继续运行
    • C#匿名委托和Java匿名局部内部类使用方法示例
    • C#编程实现QQ界面的方法
    • C#使用Ado.Net更新和添加数据到Excel表格的方法
    • C#下载歌词文件的同步和异步方法
    • c# 实现轮询算法实例代码
    • WinForm拖拽控件生成副本的解决方法
    • C#二分查找算法实例分析
    • C#中this的使用实例分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有