当前位置: 首页 > 编程语言 > C#

真正简单的WPF表单数据验证-怎么做?分享

时间:2023-04-10 21:28:28 C#

真正简单的WPF表单数据验证-如何?我有一个非常简单的类,我们称它为客户端。它看起来像这样:namespaceTestValidation{classCustomer{privatestring_name;publicstringName{get{return_name;}设置{_name=值;if(String.IsNullOrEmpty(value)){thrownewException("必须填写客户姓名。");}}}}}我现在已经创建了一个基本表单,用户可以在其中将客户添加到数据库中。该窗体包含一个简单的TextBox,绑定到Customer的Name属性,以及一个“添加”按钮。XAML代码是:从Name属性的setter中,您可以了解到我需要名称,因此我希望在NameTextBox留空时触发验证事件。根据WPF的验证规则——一旦用户将焦点移出文本框,并且其中没有任何值——它应该将边框颜色更改为红色。出于某种原因-这没有发生,我不知道为什么。我的流程有什么问题?现在,我已经阅读了很多关于WPF验证的好文章(例如使用WPF执行复杂的业务数据规则、WPF中的数据验证和WindowsPresentationFoundation中的验证),但它们都没有帮助我解决我的问题。最后,我希望表格看起来像BrianNoyes第一个链接上的优秀文章(没有10个学分,所以我无法附上照片......抱歉)。如果有人能向我解释它是如何工作的,我将不胜感激。重要提示——我使用的是.Netframework4,所以我需要一个适合这个版本的解决方案。我肯定会推荐使用IDataErrorInfo进行WPF验证,因为WPF已经知道如何使用它并且很容易实现。首先,将接口添加到包含要验证的数据的类中。所需的方法可能如下所示:publicclassCustomer:IDataErrorInfo{...#regionIDataErrorInfoMembersstringIDataErrorInfo.Error{get{returnnull;}}stringIDataErrorInfo.this[stringcolumnName]{get{if(columnName=="Name"){//验证属性并在出现错误时返回字符串if(string.IsNullOrEmpty(Name))return"NameisRequired";}//如果没有错误,则返回nullreturnnull;}}#endregion}接下来,您需要在TextBox绑定中设置ValidatesOnDataErrors=True以在Name属性更改时运行验证:最后,在XAML中创建一个验证模板,告诉WPF如何绘制验证错误。这是我经常使用的样式/模板:另外,确保您的Customer类实现INotifyPropertyChanged,以便它正确响应UI更新。我没有在您的代码中看到这一点,但通常人们为了简单起见而保留它:)您没有指定验证规则。在离开控件之前将调用验证规则,然后您可以做任何您想验证输入的事情。这里提供了一个简单的例子——我想这就是你想要做的。使用IDataErrorInfo进行验证。此链接将为您提供帮助。我认为问题可能是您的类没有实现INotifyPropertyChanged,因此没有像您期望的那样绑定。实现INotifyPropertyChanged接口,在属性更改时引发事件,它应该可以工作。有关演练,请参阅http://msdn.microsoft.com/en-us/library/ms743695(v=vs.110).aspx。我知道这篇文章很旧,但这对我有用。没有滞后或长编码,但我只在双精度值上使用它。您可以根据需要更改它。privatevoidsearch_box_TextChanged(objectsender,TextChangedEventArgse){//如果用户键入数字,框文本和背景将变为正常状态search_box.Foreground=Brushes.Black;search_box.Background=Brushes.White;if(search_id.IsSelected==true){try{//在用户输入时转换if(string.IsNullOrEmpty(search_box.Text)==false)Convert.ToDouble(search_box.Text);search_error.Text=null;}//ifusertypesaletteroraspaceorasymbol====>catch(Exception){//用户不能输入除数字以外的任何值,因为异常会阻止它并清除框文本值希望这有帮助。http://msdn.microsoft.com/en-us/library/ms752347%28v=vs.110%29.aspx#what_is_data_binding请使用这个博客:prasadcsharp.blogspot.comIntRangeRule类:以上是C#学习教程:True非常简单的WPF表单数据验证-如何验证?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注---publicclassIntRangeRule:ValidationRule{privateint_min;私有整数_max;publicIntRangeRule(){}publicint}set{_min=value;}}publicintMax{get{return_max;}设置{_max=值;}}publicoverrideValidationResultValidate(objectvalue,CultureInfocultureInfo){intl_input=0;try{if(((string)value).Length>0){l_input=Int32.Parse((String)value);}}catch(Exceptione){returnnewValidationResult(false,"非法字符或"+e.Message);}if((l_inputMax)){returnnewValidationResult(false,"请输入范围内的值:"+Min+"-"+Max+".");}返回新的ValidationResult(true,null);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: