2023年7月19日发(作者:)
WPF快速⼊门教程之绑定Binding绑定(Binding)元素介绍⾸先,盗⽤张图。这图形象的说明了Binding的机理。此处主要介绍的绑定类是g,如果涉及其他内容,将简要介绍,不会过多说明。下⾯将简要介绍最基础(最常⽤)的三个属性:1、Path —— 路径,⽤于索引到具体的属性,常常会省略书写,⽰例如下:其中Path=可以省略,因为Binding元素含有⼀个带参构造函数,其参数为path。另外,⽰例中A.B需具体到属性,如果A已经是需要绑定的具体属性,则可以⽤A替换A.B。即最简单的格式是: 2、Mode —— 模式,⽤于指定数据的更新⽅向,它是⼀个枚举类型,共有⼀下四种⽅式:OneTime —— ⼀次性更新(只更新⼀次),从数据源更新到当前使⽤的绑定属性。OneWay —— 单向更新,从数据源更新到当前使⽤的属性。OneWayToSource —— 单向更新,从当前使⽤的属性更新到数据源。TwoWay —— 双向更新,当前属性与数据源同步。注:如果未指定,即表⽰使⽤默认模式,⽽在不同的依赖属性上,其模式是不⼀样的。在使⽤时,如果不确定其默认模式是否是⾃⼰需要的模式时,则可以⼿动指定。3、UpdateSourceTrigger —— 数据源更新触发器,⽤于指定控件上的属性值什么时候更新到数据源,它也是个枚举类型,有以下三种⽅式:Explicit —— 显⽰更新,需要调⽤UpdateSource⽅法后才能更新。LostFocus —— 失去焦点更新PropertyChanged —— 属性值改变更新,⼤部分情况会使⽤此⽅式,但有时频繁的更新数据源会降低效率,如在TextBox中,如果数据源有较多的数据验证,此时在输⼊Text时,就有可能出现界⾯卡顿的情况。注:当然,此处也有默认值设置,但不同的控件 属性的 默认 值也不⼀样,不过⼤部分情况下默认 值是PropertyChanged,⽐较特殊的有TextBox的Text属性,其默认值是LostFocus。下⾯给⼀个最常⽤的绑定书写⽅式:控件绑定控件绑定,即在同⼀个界⾯中不同控件之间的数据同步处理,最常见的就是滑动条与⼀个⽂本框之间的绑定。在控件绑定中,需要指定绑定类的ElementName属性值,即当前属性绑定到哪⼀个控件的属性上。⽰例如下:注:在WPF开发中,我们常常是不为控件设置Name值的,⽽在控件绑定中,必须为源控件添加Name属性值;⽽有些控件可能会不含有Name属性,此时则使⽤x:Name来指定名称。在控件绑定中有⼀个⽐较特殊的存在——模板绑定-TemplateBinding,它与Binding并不在⼀个继承结构上。TemplateBinding是⽤在控件模板定义中的,⽤于绑定模板对应控件中的属性,⽰例如下: TemplateBinding可以简单理解为在Binding中设置了ElementName为其⽗级控件 —— 事实并⾮如此,仅作为辅助理解。TemplateBinding相对与Binding要少很多属性内容。数据绑定此处数据绑定表⽰在WPF中的对象绑定,即常见场景 就是把数据库 数据显⽰到 界⾯上。⽽在真实的项⽬开发中 ,常 会⽤到MVVM模式,数据绑定将会在那⾥体现出来,但MVVM模式开发则不在此节中叙述。下⾯以⼀个最简单的⽰例解释数据绑定:后台类 —— 数据源结构:class ForDataBinding{ public int Count { get; set; }}数据源初始化 —— 创建数据并将数据绑定到界⾯:ForDataBinding data = new ForDataBinding(); = 10;ntext = data;界⾯控件设置 —— 指定控件绑定到源数据的哪个属性: 其中设置了Grid的DataContext,即表⽰Grid内部数据上下⽂是以设置的数据源为基础,在此⽰例中,Text属性绑定的Count就是以ForDataBinding类对象为基础查找属性。 —— 即绑定路径是以当前位置以树形结构往下查找对应属性。其他元素Binding除了以上内容,还有其他的属性设置,本⼩节将简要介绍⼏个较为常⽤的内容。数据格式化转换在数据绑定中,有时我们需要显⽰的数据与源数据不⼀样,如时间格式,浮点数格式,或者更复杂⼀些的想要⼀个类对象中的多个属性组合⼀起显⽰。对于简单的数据格式化,可以通过StringFormat来处理,如时间格式化为yyyy-MM-dd,浮点数保留两位⼩数等等。其代码⽰例如下:后台类:class SimpleDataConvert{ public DateTime Date { get; set; } = ; public float Price { get; set; } = 100.123456f;}使⽤:ntext = new SimpleDataConvert();界⾯处理: 上述⽰例结果就是将Date⽇期格式化为yyyy-MM/dd;将Price保留两位⼩数显⽰。但是有些数据显⽰要求⽆法通过StringFormat处理,则需要使⽤Binding的属性Converter来处理了 —— 即通过值转换器来处理。下⾯我们以上⾯⽤到的时间转化为例,假如我们要在前台显⽰yyyyMMdd格式的⽇期,此时从数据源显⽰到界⾯可以正确处理,但是在界⾯输⼊,它⽆法正确转化为源数据,即内置的Converter不⽀持,此时我们就需要⾃⼰实现值转换,⽰例 如下:⾸先定义DateConverter,实现接⼝IValueConverter,代码如下:class DateConverter : IValueConverter{ /// /// 数据源转界⾯显⽰ /// /// /// /// /// /// public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (e() == typeof(me)) { return ((me)value).ToString("yyyyMMdd"); } else { return value; } } /// /// 界⾯显⽰转数据源 /// /// /// /// /// /// public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (targetType == typeof(me) && value != null) { DateTime dt = ; string valuestr = ng(); if (se(valuestr, out dt)) { return dt; } else if ( == 8) { string yearstr = ing(0, 4); string monthstr = ing(4, 2); string daystr = ing(6, 2); if (se(("{0}-{1}-{2}", yearstr, monthstr, daystr), out dt)) { return dt; } } } return value; }}然后在Xaml⽂件中添加引⽤:由于此处DateConvert直接定义在当前窗体类命名空间下,所以其已经默认添加了如下空间,如果定义在其他位置,则需要⼿动添加空间引⽤。xmlns:local="clr-namespace:Binding_Demo"资源定义,以便于在控件中引⽤ 最后,则将值转换器应⽤到控件上,代码如下:⾄此,⼀个简单的值转换器就完成了。数据验证在绑定中的验证主要设计四个属性:ValidatesOnDataErrors或者ValidatesOnNotifyDataErrors(WPF 4.5之后才有的)—— 与DataErrorValidationRule或NotifyDataErrorValidationRule组合使⽤ValidatesOnExceptions —— 与ExceptionValidationRule组合使⽤NotifyOnValidationError —— 控制是否触发事件,⽤于额外的内容处理ValidationRules —— 验证规则,⽤于定义验证规则集合下⾯我们以异常验证规则来简要介绍验证规则的使⽤ —— 验证处理涉及的内容有很多,单此⼀节⽆法描述完整,故仅列举最简单的使⽤⽅式:⾸先是后台类的定义:class ForExceptionValidate{ private int max; public int Max { get { return max; } set { if (value > 100) { throw new Exception("Max不能超过100"); } max = value; } }}ntext = new ForExceptionValidate();然后是界⾯使⽤: <> > 在此 ⽰例 中,后台类中抛出的异常,会作为界⾯的验证结果来处理 —— 所以此处虽然没有明确使⽤异常捕获,但程序并 不会崩溃。依赖属性最后,简要说下依赖属性,所有上⾯的绑定基础都需要靠依赖属性。所有需要绑定功能的属性都进⾏了对应依赖属性(encyProperty)定义。在WPF中,我们⼤部分时间是在⽤依赖属性 —— 各种绑定,⽽⾃⼰的定义依赖属性的情况相对较少,所以此处就不再介绍如何定义依赖属性 —— 作为⼊门介绍教程。总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689718165a280682.html
评论列表(0条)