Xamarin Forms Form Validations

在开发移动应用程序时,表单验证是一个关键功能,它确保用户输入的数据符合预期的格式和规则。本文将介绍如何使用Xamarin Forms来实现表单验证,支持 iOS 和 Android 设备。将遵循 ASP.NET MVC 中的数据注解验证方法,以保持一致性和简洁性。

设计目标

设计目标包括:

  • 所有字段验证(如必填、电子邮件)应在提交表单时进行。
  • 如果验证失败,应在每个字段下方显示验证消息。
  • 验证设计应简单易实现,且在技术栈中保持一致。
  • 遵循 ASP.NET MVC 中的数据注解验证。

先决条件

在开始之前,请确保已经安装了最新版本的 Visual Studio 2017,并安装了 Xamarin 工作负载和模拟器。

步骤 1 - 创建新的Xamarin Forms项目

使用 Visual Studio 2017 创建一个新的 Xamarin Forms 项目。选择 "文件" -> "新建" -> "项目"。在新项目窗口中,选择 "跨平台" -> "移动应用 (Xamarin Forms)"。输入项目名称 "Validation Demo" 并点击 "确定"。选择 "空白项目" 并创建项目。

步骤 2 - 使用 XAML 创建登录页面

为了验证示例,将在 MainPage.xaml 中添加两个输入字段(用户名和密码)以及一个登录按钮。提交表单时,将实现以下验证逻辑:

  • 用户名字段是必填的。
  • 用户名字段应该是有效的电子邮件地址。
  • 用户名字段的最大长度为 20 个字符。
  • 密码字段是必填的。

打开 MainPage.xaml 并修改 XAML 如下:

注意:为了使验证工作,在每个输入字段下方添加了错误标签,并遵循了 "Entry Binding Field Name Error" 的命名约定。"." 被替换为 "_"。

步骤 3 - 创建登录模型类

创建 Login Model 类,其中包含验证逻辑。确保向项目中添加 System.ComponentModel.Annotations Nuget 包。

using System.ComponentModel.DataAnnotations; namespace ValidationsDemo.Model { public class LoginModel { [Required, MaxLength(20), EmailAddress] public string Username { get; set; } [Required] public string Password { get; set; } public bool RememberMe { get; set; } } }

注意:在上面的模型中,使用 Required, MaxLength(20) 和 EmailAddress 属性应用了所有验证要求。

步骤 4 - 创建视图模型类

由于Xamarin Forms推荐使用MVVM模式,将创建一个名为 MainPageViewModel.cs 的视图模型类。

namespace ValidationsDemo.ViewModel { public class MainPageViewModel { public LoginModel LoginModel { get; set; } = new LoginModel(); public ICommand LoginInCommand { get; private set; } public MainPageViewModel(Page page) { _page = page; LoginInCommand = new Command(async () => await LoginAsync()); } private async Task LoginAsync() { if (!ValidationHelper.IsFormValid(LoginModel, _page)) return; await _page.DisplayAlert("Success", "Validation Success!", "OK"); } } }

注意:在上面的代码中,在 LoginAsync 命令中,有一个 ValidationHelper.IsFormValid(LoginModel, _page) 代码,它将根据验证属性对表单进行所有验证的魔法。将在下一节中详细了解验证帮助器类。

步骤 5 - 将视图模型类绑定到页面

打开 MainPage.xaml.cs 文件,并将视图模型类实例分配给 Main Page Binding Context,如下所示:

using ValidationsDemo.ViewModel; using Xamarin.Forms; namespace ValidationsDemo { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); this.BindingContext = new MainPageViewModel(this); } } }

步骤 6 - 创建验证帮助器类

创建一个名为 ValidationHelper 的新类,并添加一个 public 方法 IsFormValid,签名如下:

public static class ValidationHelper { public static bool IsFormValid(object model, Page page) { HideValidationFields(model, page); var errors = new List(); var context = new ValidationContext(model); bool isValid = Validator.TryValidateObject(model, context, errors, true); if (!isValid) { ShowValidationFields(errors, model, page); } return errors.Count() == 0; } private static void HideValidationFields(object model, Page page, string validationLabelSuffix = "Error") { if (model == null) return; var properties = GetValidatablePropertyNames(model); foreach (var propertyName in properties) { var errorControlName = $"{propertyName.Replace(".", "_")}{validationLabelSuffix}"; var control = page.FindByName

步骤 7 - 运行项目并测试验证

已经完成了基本的表单验证实现,现在是时候进行测试了。让通过目标可用的模拟器运行项目,应该能够看到以下登录屏幕。要执行各种测试用例,请单击登录按钮。

  • 测试用例 1:测试必填字段验证。
  • 测试用例 2:测试有效电子邮件地址验证。
  • 测试用例 3:测试最大长度验证。
  • 测试用例 4:测试成功验证。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485