Как проверить, что запись числа не с «0» в C # - PullRequest
0 голосов
/ 20 марта 2019

У меня есть элемент управления типа <Entry>, в котором я не хочу, чтобы пользователь вводил значения, начинающиеся с «0», например ...

0

01

00

00010

Но если я хочу ввести значения, содержащие «0», в виде натуральных чисел, дляпример ...

10

2010

200000

MyView.XAML:

<Entry
      HorizontalOptions="FillAndExpand"
      Placeholder="Cantidad"
      Keyboard="Numeric"
      MaxLength="9"
      Text="{Binding CantidadContenedor}"></Entry>

MyViewModel.CS:

   string cantidadContenedor;

   public string CantidadContenedor
        {
            get
            {
                return  cantidadContenedor;
            }
            set
            {
                if (cantidadContenedor != value)
                {
                    cantidadContenedor = value;
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CantidadContenedor)));
                }
            }
        }

Как я могу добавить эту проверку, как только я получу значение Entry?

Могу ли я занять свойство TryParse, являющееся Container Quantity извведите string?

Любая помощь для меня?

Ответы [ 3 ]

3 голосов
/ 20 марта 2019

Этот работает отлично !!

    public MainPage()
    {
        InitializeComponent();

        MyEntry.TextChanged+= MyEntry_TextChanged;
    }

    void MyEntry_TextChanged(object sender, Xamarin.Forms.TextChangedEventArgs e)
    {
        if(!string.IsNullOrWhiteSpace(MyEntry.Text))
        {
            if (MyEntry.Text.StartsWith("0"))
                MyEntry.Text = e.OldTextValue;
        }
    }
1 голос
/ 20 марта 2019

Я бы создал правило валидации.

В вашем XAML

<Entry
  HorizontalOptions="FillAndExpand"
  Placeholder="Cantidad"
  Keyboard="Numeric"
  MaxLength="9">
  <Entry.Text>
     <Binding Path=CantidadContenedor>
         <Binding.ValidationRules>
             <validationRules:StartWithRule Prefix="0"/>
     </Binding>
  </Entry.Text>
</Entry>

Теперь вы создадите валидацию, которую считаете нужной.В твоем случае

public class StartWithRule : ValidationRule
{
    public string Prefix { get; set; }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        // Pass the value to string
        var numberToCheck = (string) value;

        if (numberToCheck == null) return ValidationResult.ValidResult;

        // Check if it starts with prefix
        return numberToCheck.StartsWith(Prefix)
            ? new ValidationResult(false, $"Starts with {Prefix}")
            : ValidationResult.ValidResult;
    }
}

И тебе надо идти.

Valid Number Invalid Number

1 голос
/ 20 марта 2019

Вы можете просто привести любое полученное значение как string.

Затем просто прочитать первую цифру в виде подстроки, например, так:

using System;

public class Program
{
    public static void Main()
    {
        string x = "0TEST";
        if(x.StartsWith("0")){
            Console.WriteLine("Starts with 0");
        }else{
            Console.WriteLine("Doesn't start with 0");
        }
    }
}

Затем напишите влогика разрешить / запретить это.

...