gpt4 book ai didi

xamarin.forms - Xamarin 表单限制输入字段中的小数位数

转载 作者:行者123 更新时间:2023-12-04 08:47:42 26 4
gpt4 key购买 nike

我在集合 View 单元格中有一个输入字段。输入字段应仅接受带有特定小数位的数值。如果它们超过小数位,我不想要更多输入。每个单元格的小数位数不同。如何在模型中或使用行为/触发器创建此验证?
目前,我的代码是这样的

<Entry Placeholder="Quantity"
Keyboard="Numeric"
Text="{Binding EnteredQuantity, Mode=TwoWay}"/>
在模型部分,我正在这样做
private string enteredQuantity = "1";

public string EnteredQuantity
{
get => enteredQuantity;

set
{
if (!decimal.TryParse(value, out decimal parsedQuantity))
{
enteredQuantity = "1";
OnPropertyChanged(enteredQuantity);
}
else
{
if (parsedQuantity > 9999.99M)
{
enteredQuantity =string.Format("9999.99", parsedQuantity);
OnPropertyChanged(enteredQuantity);
}
else
{
string formatString = "{" + "0:0.".PadRight(4 + (int) BaseDecimalPlaces, '#') + "}"; //Format of {0:0.##}
if (IsAlternateUnitUsed && selectedUnit.Value == "A")
{
formatString = "{" + "0:0.".PadRight(4 + (int) AlternateDecimalPlaces, '#') + "}";
}

enteredQuantity = string.Format(formatString, parsedQuantity);
OnPropertyChanged(enteredQuantity);
}
}
}
}
对于上面的测试,格式字符串为{0:0.##},小数位为2。
我正在尝试限制 Binding 属性中的值。但是,这并没有反射(reflect)在前端。前端将显示任何小数位,如下图所示。有人知道如何解决这个问题吗?
Sample screenshot

最佳答案

使用行为来实现这一点
Xaml 代码

...
xmlns:local="clr-namespace:DummyTestApp"
...
<Entry HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand">
<Entry.Behaviors>
<local:LengthValidateBehavior MaxLength="7"/>
</Entry.Behaviors>
</Entry>
行为类
public class LengthValidateBehavior : Behavior<Entry>
{
public static BindableProperty MaxLengthProperty = BindableProperty.Create(nameof(MaxLength), typeof(int), typeof(LengthValidateBehavior), 5/* default value*/);

public int MaxLength
{
get
{
return (int)GetValue(MaxLengthProperty);
}
set
{
SetValue(MaxLengthProperty, 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)
{
if (sender is Entry entry)
{
if (args.NewTextValue.Length > MaxLength)// write your logic here
{
entry.Text = args.OldTextValue;
}
}
}
}

同样,根据您自己的要求,使用您自己的逻辑来限制条目。

关于xamarin.forms - Xamarin 表单限制输入字段中的小数位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64224067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com