簡體   English   中英

如何使用MVVMCross在Xamarin.Android中驗證數字

[英]How to validate the number in Xamarin.Android with MVVMCross

我有使用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中的新手,有點困惑。 請幫忙

UPD。 我從fmaccaroni建議中添加了更改。 現在錯誤消息總是在這里。 即使該區域僅包含數字。

您可以嘗試通過以下方式實現它:

int numb;
if (!int.TryParse(UserNumber, out numb) && UserNumber.Length != 0) 
{
    return "Incorrect phone number";
}

您的綁定錯誤,它們應該是local:MvxBind="Text UserNumber"local:MvxBind="Text IncorrectNumber"檢查文檔

並且除非您使用Fody.PropertyChanged包(我建議您使用),否則應在_userNumber = value;的設置器內調用this.RaisePropertyChanged(() => this.IncorrectNumber) ,即在_userNumber = value; 為了通知View某些屬性( IncorrectNumber )已從ViewModel中更改

更新

您還應該像@mrisek所說的那樣在IncorrectNumber setter中更改您的驗證。 應該像

public string IncorrectNumber => !string.IsNullOrEmpty(UserNumber) && int.TryParse(UserNumber, out int n) ? null : "Incorrect phone number" ;

如果使用is運算符,它將比較該對象是否屬於該Type (不清楚)。 順便說一句,請記住Int32的長度,如果您想使用更大的數字,則應使用Int64或使用Regex進行驗證: Regex.IsMatch(UserNumber, @"^\\d+$")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM