大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇博客文章探讨了Xamarin.Forms企业应用程序的验证。当然,有许多方法可以用于验证。这里介绍的是eShopOnContainers手机应用程序中的验证方法,这是可扩展的,易于单元测试,并且支持数据绑定和属性更改通知。
专注于为中小企业提供成都网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业北戴河免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
任何接受用户输入的应用程序都应确保输入有效。 例如,应用程序可以检查仅包含特定范围内的字符的输入,具有一定长度,或匹配特定格式。 没有验证,用户可以提供导致应用失败的数据。 验证强制执行业务规则,并防止***者注入恶意数据。
在Model-ViewModel-Model(MVVM)模式的上下文中,通常需要视图模型或模型来执行数据验证,并向视图发出任何验证错误,以便用户可以对其进行更正。 eShopOnContainers移动应用程序执行视图模型属性的同步客户端验证,并通过突出显示包含无效数据的控件,并通过显示通知用户为什么数据无效的错误消息来通知用户任何验证错误。 下图显示了在eShopOnContainers移动应用程序中执行验证所涉及的类:
需要验证的视图模型属性的类型为ValidatableObject
属性更改通知由ExtendedBindableObject类提供,因此Entry控件可以绑定到视图模型类中的ValidatableObject
验证规则通过创建从IValidationRule
public interface IValidationRule{ string ValidationMessage { get; set; } bool Check(T value); }
此接口指定验证规则类必须提供用于执行所需验证的布尔检查方法,以及ValidationMessage属性,其值为验证失败时将显示的验证错误消息。
以下代码示例显示了IsNotNullOrEmptyRule
public class IsNotNullOrEmptyRule: IValidationRule { public string ValidationMessage { get; set; } public bool Check(T value) { if (value == null) { return false; } var str = value as string; return !string.IsNullOrWhiteSpace(str); } }
Check方法返回一个布尔值,指示value参数是空值,空值还是仅由空格字符组成。
在eShopOnContainers手机应用程序中,需要验证的视图模型属性被声明为ValidatableObject
public ValidatableObjectUserName { get { return _userName; } set { _userName = value; RaisePropertyChanged(() => UserName); } }
为了进行验证,验证规则必须添加到ValidatableObject
private void AddValidations() { _userName.Validations.Add(new IsNotNullOrEmptyRule{ ValidationMessage = "A username is required." }); }
此方法将IsNotNullOrEmptyRule
视图模型属性可以手动触发验证。 例如,当使用模拟服务时,当用户点击LoginView上的Login按钮时,会发生在eShopOnContainers移动应用程序中。 命令委托在LoginViewModel中调用MockSignInAsync方法,该方法通过执行Validate方法来调用验证,该方法又调用ValidateUserName方法:
private bool ValidateUserName() { return _userName.Validate(); }
ValidateUserName方法通过调用ValidatableObject
public bool Validate() { Errors.Clear(); IEnumerableerrors = _validations .Where(v => !v.Check(Value)) .Select(v => v.ValidationMessage); Errors = errors.ToList(); IsValid = !Errors.Any(); return this.IsValid; }
此方法将清除Errors集合,然后检索添加到对象的Validations集合的任何验证规则。 执行每个检索的验证规则的检查方法,并且无法验证数据的任何验证规则的ValidationMessage属性值都将添加到ValidatableObject
绑定属性更改时也会自动触发验证。 了解更多信息,请查看属性变化是的触发验证。
eShopOnContainers手机应用程序通过突出显示包含无效数据的控件以红色线条通知用户任何验证错误,并显示一条错误消息,通知用户为什么数据在包含无效数据的控件下无效。 以下屏幕截图显示eShopOnContainers手机应用程序中的一些LoginView,当出现验证错误时:
LineColorBehavior附加行为用于突出显示已发生验证错误的Entry控件。 以下代码示例显示如何将LineColorBehavior附加行为附加到Entry控件:
...
Entry控件使用显式样式,如下面的代码示例所示:
此样式将EntryColorBehavior附加行为的ApplyLineColor和LineColor附加属性设置为Entry控件。 当ApplyLineColor附加属性的值被设置或更改时,LineColorBehavior附加行为执行OnApplyLineColorChanged方法,该方法将EntryLineColorEffect类添加或删除到Entry的Effects集合。 有关EntryLineColorEffect类的更多信息,请查看突出显示包含无效数据的控件。
Entry控件还将DataTrigger添加到其Triggers集合中。 以下代码示例显示DataTrigger:
...
该DataTrigger监视UserName.IsValid属性,如果值为false,它将执行Setter,它将LineColorBehavior附加行为的LineColor附加属性更改为红色。
UI会在数据失败验证的每个控件下面的Label控件中显示验证错误消息。 以下代码示例显示如果用户未输入有效的用户名,则该标签显示验证错误消息:
每个标签绑定到正在验证的视图模型对象的Errors属性。 错误属性由ValidatableObject
使用Xamarin.Forms的企业应用程序模式专注于开发Xamarin.Forms更容易测试,维护和发展的企业应用程序的核心模式和架构指导。 电子书还附带了示例应用程序,eShopOnContainers手机应用程序 ,其执行视图模型属性的同步客户端验证,并通过突出显示包含无效数据的控件,并通过显示通知用户为什么数据无效的错误消息来通知用户任何验证错误。