我有一个使用 MVVMCross 的 Xamarin.Android 项目。我使用 Visual Studio。
Windows 10 64 Pro
Visual Studio 2017
我需要为数字输入创建文本区域并集成基本验证(这是一个数字吗?)如果出现错误,用户应该看到错误消息。
我已经创建了这个元素的布局。数字和错误消息区域。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
<EditText
android:id="@+id/userNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLength="10"
android:phoneNumber="true"
local:MvxBind="Text UserNumber" />
<TextView
android:id="@+id/incorrectNumber"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textColor="#F44336"
local:MvxBind="Text IncorrectNumber" />
这里是 NumberViewModel.cs
:
using MvvmCross.Platform.Converters;
using System;
using System.Collections.Generic;
using System.Globalization;
using My.project.Core.Models;
namespace My.project.Core.ViewModels
{
class NumberViewModel : BaseViewModel
{
private string _userNumber;
private string _incorrectNumber;
public string UserNumber
{
get
{
return _userNumber;
}
set
{
_userNumber = value;
this.RaisePropertyChanged(() => this.UserNumber);
this.RaisePropertyChanged(() => this.IncorrectNumber);
}
}
public string IncorrectNumber
{
get
{
if (UserNumber is Int16 || UserNumber is Int32)
{
return null;
}
else
{
return "Incorrect phone number";
}
}
}
}
}
但由于某些原因,如果我在此区域键入非数字字符,则看不到错误消息。它应该出现在数字下方。
我是 MVVMCross 的新手,有点困惑。请帮忙
更新。我添加了 fmaccaroni 建议的更改。 现在错误信息总是在这里。即使该区域仅包含数字。
最佳答案
您的绑定(bind)有误,它们应该是 local:MvxBind="Text UserNumber"
和 local:MvxBind="Text IncorrectNumber"
检查 docs .
除非你使用 Fody.PropertyChanged包(我建议您使用)您应该在 UserNumber 的 setter 中调用 this.RaisePropertyChanged(() => this.IncorrectNumber)
,即在 _userNumber = value;
之后code> 以便通知 View 某些属性 (IncorrectNumber
) 已从 ViewModel 更改
更新
如@mrisek 所说,您还应该在 IncorrectNumber
setter 中更改您的验证。
应该是这样的
public string IncorrectNumber => !string.IsNullOrEmpty(UserNumber) && int.TryParse(UserNumber, out int n) ? null : "电话号码不正确";
如果您使用is
运算符,它会比较对象是否属于该类型
,但不清楚。
顺便记住 Int32 的长度,如果你想要一个更大的数字,你应该使用 Int64 或使用 Regex 进行验证:Regex.IsMatch(UserNumber, @"^\d+$")
关于android - 如何使用 MVVMCross 验证 Xamarin.Android 中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48283777/