Xamarin.Forms 数字输入逗号和圆点不起作用
Xamarin.Forms Numeric Entry comma and Dot not working
我在 Xamarin.Forms 中有一个输入字段。
在 Android 上,我无法输入逗号或点来生成小数。该条目只接受整数。我必须更改什么才能输入小数?
Xaml:
<Entry Keyboard="Numeric" Text="{Binding Price1}" Placeholder="Price"/>
内容页 cs:
private decimal price1;
public string Price1
{
get { return (price1).ToString(); }
set
{
price1 = Convert.ToDecimal((String.IsNullOrEmpty(value)) ? null : value);
OnPropertyChanged(nameof(Price1));
}
}
根据我的经验,Xamarin 很难显示小数点。您最终输入了小数点的任一侧,并且其行为永远不会一致。
我发现让 ViewModel 提供非十进制整数值并使用值转换器将其显示为小数要容易得多。
例如
<Label x:Name="CpvValueText" Text="{Binding ScaledValue, Mode=OneWay, Converter={x:StaticResource DecimalConverter}}" />
...
/// <summary>
/// This helper class converts integer values to decimal values and back for ease of display on Views
/// </summary>
public class DecimalConverter : IValueConverter
{
/// <inheritdoc />
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (null == value)
{
return 0;
}
var dec = ToDecimal(value);
return dec.ToString(CultureInfo.InvariantCulture);
}
/// <inheritdoc />
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var strValue = value as string;
if (string.IsNullOrEmpty(strValue))
{
strValue = "0";
}
return decimal.TryParse(strValue, out var result) ? result : 0;
}
}
最快的方法是创建一个带有绑定的字符串属性,并在使用时转换为十进制。
视图模型
private string price1;
public string Price1
{
get { return price1; }
set
{
price1 = value;
OnPropertyChanged(nameof(Price1));
}
}
用法
decimal f = Convert.ToDecimal(Price1);
正如@Cole Xia - MSFT 指出问题中代码的问题是
输入立即从字符串转换为十进制。这导致在转换过程中删除小数点 point/comma 。所以必须一直保持entry的内容为String,在使用的时候转为数值类型。
我在 Xamarin.Forms 中有一个输入字段。
在 Android 上,我无法输入逗号或点来生成小数。该条目只接受整数。我必须更改什么才能输入小数?
Xaml:
<Entry Keyboard="Numeric" Text="{Binding Price1}" Placeholder="Price"/>
内容页 cs:
private decimal price1;
public string Price1
{
get { return (price1).ToString(); }
set
{
price1 = Convert.ToDecimal((String.IsNullOrEmpty(value)) ? null : value);
OnPropertyChanged(nameof(Price1));
}
}
根据我的经验,Xamarin 很难显示小数点。您最终输入了小数点的任一侧,并且其行为永远不会一致。
我发现让 ViewModel 提供非十进制整数值并使用值转换器将其显示为小数要容易得多。
例如
<Label x:Name="CpvValueText" Text="{Binding ScaledValue, Mode=OneWay, Converter={x:StaticResource DecimalConverter}}" />
...
/// <summary>
/// This helper class converts integer values to decimal values and back for ease of display on Views
/// </summary>
public class DecimalConverter : IValueConverter
{
/// <inheritdoc />
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (null == value)
{
return 0;
}
var dec = ToDecimal(value);
return dec.ToString(CultureInfo.InvariantCulture);
}
/// <inheritdoc />
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var strValue = value as string;
if (string.IsNullOrEmpty(strValue))
{
strValue = "0";
}
return decimal.TryParse(strValue, out var result) ? result : 0;
}
}
最快的方法是创建一个带有绑定的字符串属性,并在使用时转换为十进制。
视图模型
private string price1;
public string Price1
{
get { return price1; }
set
{
price1 = value;
OnPropertyChanged(nameof(Price1));
}
}
用法
decimal f = Convert.ToDecimal(Price1);
正如@Cole Xia - MSFT 指出问题中代码的问题是 输入立即从字符串转换为十进制。这导致在转换过程中删除小数点 point/comma 。所以必须一直保持entry的内容为String,在使用的时候转为数值类型。