Estoy tratando de validar un valor de entrada usando las conductas de entrada. Para hacerlo, necesito pasar el valor a la clase de comportamiento desde otro control en el mismo XAML.

Tengo menos de dos controles

    <Entry
    x:Name="RegisterQty"
    Grid.Column="0"
    WidthRequest="120"
    TextChanged="RegisterQty_TextChanged"
    TextColor="Black"
    HorizontalOptions="Start"
    VerticalOptions="Center"
    FontAttributes="Bold"
    PlaceholderColor="Black" 
    Keyboard="Numeric"
    FontSize="20">
    <Entry.Behaviors>
           <local:RegisterQtyBehavior LoadQty = "{Binding BindingContext.qty, Source={x:Reference RegisterQty}} "/>
    </Entry.Behaviors>

    </Entry>

public class RegisterQtyBehavior : Behavior<Entry>
{        
    public static readonly BindableProperty LoadQtyProperty = BindableProperty.Create(nameof(LoadQty), typeof(double), typeof(RegisterQtyBehavior), 0);

    public double LoadQty
    {
        get { return (double)GetValue(LoadQtyProperty); }
        set { SetValue(LoadQtyProperty, value); }
    }
    protected override void OnAttachedTo(Entry entry)
    {
        entry.TextChanged += OnEntryTextChanged;
        base.OnAttachedTo(entry);
    }

    protected override void OnDetachingFrom(Entry entry)
    {
        entry.TextChanged -= OnEntryTextChanged;
        base.OnDetachingFrom(entry);
    }

    void OnEntryTextChanged(object sender, TextChangedEventArgs args)
    {
        double result = LoadQty;

        bool isValid = double.TryParse(args.NewTextValue, out result);
        ((Entry)sender).TextColor = isValid ? Color.Red : Color.Default;
    }
}

Quiero pasar la cantidad de vinculación de etiquetas al control de entrada. ¿Cómo podría lograr esto? Añadiendo directamente LoadQty = "{Binding Qty}"
No funciona.

0
Zeeshan shaikh 14 jul. 2019 a las 11:43

1 respuesta

La mejor respuesta

De acuerdo con su descripción, desea un parámetro en los comportamientos de entrada usando enlace, ¿tengo razón? Si es así, hago una muestra, puedes echar un vistazo:

   <Entry x:Name="registerqty">
            <Entry.Behaviors>
                <local:RegisterQtyBehavior LoadQty="{Binding BindingContext.qty, Source={x:Reference registerqty}}}" />
            </Entry.Behaviors>

        </Entry>

public partial class Page37 : ContentPage, INotifyPropertyChanged
{
    private int _qty;
    public int qty
    {
        get { return _qty; }
        set
        {
            _qty = value;
            RaisePropertyChanged("qty");
        }
    }

    public Page37 ()
    {
        InitializeComponent ();
        qty = 100;

        this.BindingContext = this;
    }


    public event PropertyChangedEventHandler PropertyChanged;       
    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

public class RegisterQtyBehavior:Behavior<Entry>
{
    public static readonly BindableProperty LoadQtyProperty = BindableProperty.Create("LoadQty", typeof(int), typeof(RegisterQtyBehavior), defaultValue: 0);

    public int LoadQty
    {
        get { return (int)GetValue(LoadQtyProperty); }
        set
        {
            SetValue(LoadQtyProperty,value);
        }
    }

    protected override void OnAttachedTo(Entry entry)
    {
        entry.TextChanged += OnEntryTextChanged;
        base.OnAttachedTo(entry);
    }

    protected override void OnDetachingFrom(Entry entry)
    {
        entry.TextChanged -= OnEntryTextChanged;
        base.OnDetachingFrom(entry);
    }

    void OnEntryTextChanged(object sender, TextChangedEventArgs args)
    {
        //double result;
        //bool isValid = double.TryParse(args.NewTextValue, out result);
        //((Entry)sender).TextColor = isValid ? Color.Default : Color.Red;
        if(!string.IsNullOrEmpty(args.NewTextValue))
        {
            if (Convert.ToInt32(args.NewTextValue) > LoadQty)
            {
                ((Entry)sender).TextColor = Color.Red;
            }
            else
            {
                ((Entry)sender).TextColor = Color.Default;
            }
        }

    }
}
0
Cherry Bu - MSFT 15 jul. 2019 a las 06:29