WPF输入验证提示

  • WPF输入验证提示已关闭评论
  • 129 次浏览
  • A+
所属分类:.NET技术
摘要

在写前端输入时,我们经常要对用户的输入进行验证,检查输入的合理性,当输入非法时,需要能提醒用户。比如下图,当输入不是IP格式的字符串时,会提示输入正确格式的IP。


WPF输入验证提示

在写前端输入时,我们经常要对用户的输入进行验证,检查输入的合理性,当输入非法时,需要能提醒用户。比如下图,当输入不是IP格式的字符串时,会提示输入正确格式的IP。
WPF输入验证提示

百度一圈得到的做法:

前端

 <TextBox Text="{Binding MccIP,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" Style="{StaticResource txtboxValiStyle}" BorderThickness="0" Width="100" Height="30" Margin="5"/> 

样式

    <!--textbox验证style-->     <Style x:Key="txtboxValiStyle" TargetType="TextBox">         <Setter Property="FontSize" Value="16"/>         <Setter Property="Height" Value="34"/>         <Setter Property="Width" Value="140"/>         <Setter Property="Margin" Value="3 12 3 0"/>          <Setter Property="VerticalContentAlignment" Value="Center"/>         <Setter Property="HorizontalContentAlignment" Value="Center"/>         <Style.Triggers>             <Trigger Property="Validation.HasError" Value="true">                 <Setter Property="Validation.ErrorTemplate">                     <Setter.Value>                         <ControlTemplate>                             <DockPanel LastChildFill="True">                                 <TextBlock DockPanel.Dock="Bottom" Background="Red" Foreground="White" FontSize="12" Height="14"                                                        Width="Auto"                                                        VerticalAlignment="Center" TextAlignment="Center" TextWrapping="Wrap" FontFamily="Arial"                                                   Text="{Binding ElementName=ErrorBox, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">                                 </TextBlock>                                 <AdornedElementPlaceholder Name="ErrorBox" />                             </DockPanel>                         </ControlTemplate>                     </Setter.Value>                 </Setter>             </Trigger>         </Style.Triggers>     </Style> 

在样式中判断,Property="Validation.HasError" Value="true",触发样试更改。

后端

测试使用的MVVM框架为Caliburn.Micro

using Caliburn.Micro; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel;   namespace DataError.ViewModels {     public class MainViewModel : Screen, INotifyPropertyChanged, IDataErrorInfo     {         private string mccIP;          [Required]         [RegularExpression(@"^((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)$", ErrorMessage = "请输入正确格式的IP地址!")]         public string MccIP         {             get { return mccIP; }             set { mccIP = value; NotifyOfPropertyChange(); }         }          #region 实现IDataErrorInfo接口         public string Error         {             get { return null; }         }          public string this[string columnName]         {             get             {                 var vc = new ValidationContext(this, null, null);                 vc.MemberName = columnName;                 var res = new List<ValidationResult>();                 var result = Validator.TryValidateProperty(this.GetType().GetProperty(columnName).GetValue(this, null), vc, res);                 if (res.Count > 0)                 {                     return string.Join(Environment.NewLine, res.Select(r => r.ErrorMessage).ToArray());                 }                 return string.Empty;             }         }         #endregion     } } 

首先在ViewModel的类中需继承IDataErrorInfo接口,并在类中实现IDataErrorInfo接口,然后使用正则表达式判断字符串格式,如果格式不匹配,输出错误消息,如下图。
WPF输入验证提示