WPFBinding转换与校验.docx
- 文档编号:25395458
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:11
- 大小:35.96KB
WPFBinding转换与校验.docx
《WPFBinding转换与校验.docx》由会员分享,可在线阅读,更多相关《WPFBinding转换与校验.docx(11页珍藏版)》请在冰豆网上搜索。
WPFBinding转换与校验
WPFBinding转换与校验
Binding是WPF的核心,而数据的转换与校验是与Binding配套的,其重要性不言而喻,前面介绍了WPF的Binding,现在来看下Converter&Validation。
本文目标是以简单的Demo展示Converter&Validation的用法。
Binding用于数据有效性校验的是Binding的ValidationRules属性,用于数据类型转换的是Binding的Converter属性。
当Source端Path所关联的数据与Target目标属性数据类型不一致是,我们可以添加数据转换器。
给出一个Demo。
首先在xaml界面中定义一个Grid。
Name="txtMsg"Text="{BindingElementName=txtBox,Path=(Validation.Errors)[0].ErrorContent}"Foreground="Red"FontWeight="Bold"Margin="34,12,161,280"/> -- Name="txtBox"Validation.ErrorTemplate="{StaticResourceerrorTemplate}"Validation.Error="txtBox_Error"> NameValidationRuleValidatesOnTargetUpdated="True"/> 下面自定义一个DataTable对象,作为Grid的数据源。 usingSystem.Data; namespaceConverterAndValidation { publicclassClassData { /// ///手动创建一个DataTable /// /// publicstaticDataTableGetDataTable() { DataTabledt=newDataTable(); dt.Columns.Add("Id"); dt.Columns.Add("Name"); dt.Columns.Add("Age"); // for(inti=1;i<=10;i++) { DataRowdr=dt.NewRow(); dr.ItemArray=newobject[]{i,"DebugLZQ"+i,25+i}; dt.Rows.Add(dr); } returndt; } } } Binding如下: DataTabledt=ClassData.GetDataTable(); dataGrid1.ItemsSource=dt.DefaultView; 为了进行转换需要实现IValueConverter接口。 usingSystem; usingSystem.Windows.Data; usingSystem.Windows.Media; namespaceConverterAndValidation { classIdConverter: IValueConverter { #regionIValueConverter成员 publicobjectConvert(objectvalue,TypetargetType,objectparameter,System.Globalization.CultureInfoculture) { intid=int.Parse(value.ToString()); if(id==1) returnnewSolidColorBrush(Colors.Silver); if(id==2) returnnewSolidColorBrush(Colors.Teal); else returnnewSolidColorBrush(Colors.Gold); } publicobjectConvertBack(objectvalue,TypetargetType,objectparameter,System.Globalization.CultureInfoculture) { thrownewNotImplementedException(); } #endregion } } 如何消费这个IdConverter呢? 添加一个xmlns xmlns: local="clr-namespace: ConverterAndValidation" 添加Window.Resources资源 IdConverterx: Key="IdConverter1"/> 在Binding处 下面同样以这个例子,写数据校验的Demo。 为了进行校验,需要准备一个抽象类ValidationRule的派生类。 usingSystem.Windows.Controls; namespaceConverterAndValidation { classNameValidationRule: ValidationRule { publicoverrideValidationResultValidate(objectvalue,System.Globalization.CultureInfocultureInfo) { stringname=value.ToString(); if(name! ="DebugLZQ5") { returnnewValidationResult(true,null); } returnnewValidationResult(false,"ErrorName,ValidationFailed."); } } } 如何消费这个Validation? 在Window.Resources中添加 NameValidationRulex: Key="NameValidationRule1"/> Key="errorTemplate"> -- ! ! --> ! ! Binding部分 Name="txtBox"Validation.ErrorTemplate="{StaticResourceerrorTemplate}"Validation.Error="txtBox_Error"> NameValidationRuleValidatesOnTargetUpdated="True"/> txtBox_Error如下 privatevoidtxtBox_Error(objectsender,ValidationErrorEventArgse) { if(e.Action==ValidationErrorEventAction.Added)//ValidationErrorOccurred { txtMsg.Text=e.Error.ErrorContent.ToString(); } else//NoError { txtMsg.Text=""; } } 程序的运行结果如下: 附: 程序完整的xaml如下: Class="ConverterAndValidation.MainWindow" xmlns=" xmlns: x=" xmlns: local="clr-namespace: ConverterAndValidation" Title="MainWindow"Height="350"Width="525"> IdConverterx: Key="IdConverter1"/> NameValidationRulex: Key="NameValidationRule1"/> Key="errorTemplate"> -- ! ! --> ! ! Name="txtMsg"Text="{BindingElementName=txtBox,Path=(Validation.Errors)[0].ErrorContent}"Foreground="Red"FontWeight="Bold"Margin="34,12,161,280"/> -- Name="txtBox"Validation.ErrorTemplate="{StaticResourceerrorTemplate}"Validation.Error="txtBox_Error"> NameValidationRuleValidatesOnTargetUpdated="True"/>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WPFBinding 转换 校验