Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Xamarin.Forms条目绑定到非字符串类型,如Decimal_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# 如何将Xamarin.Forms条目绑定到非字符串类型,如Decimal

C# 如何将Xamarin.Forms条目绑定到非字符串类型,如Decimal,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我已经创建了和条目,我正在尝试将其绑定到十进制属性,如: var首付=新分录(){ HorizontalOptions=LayoutOptions.FillAndExpand, 占位符=“首期付款”, 键盘=键盘。数字 }; downPayment.SetBinding(Entry.TextProperty,“downPayment”); 当我尝试在模拟器上输入条目时,出现以下错误 对象类型System.String无法转换为目标类型:System.Decimal 在撰写本文时,在绑定时没有内

我已经创建了和条目,我正在尝试将其绑定到十进制属性,如:

var首付=新分录(){
HorizontalOptions=LayoutOptions.FillAndExpand,
占位符=“首期付款”,
键盘=键盘。数字
};
downPayment.SetBinding(Entry.TextProperty,“downPayment”);
当我尝试在模拟器上输入条目时,出现以下错误

对象类型System.String无法转换为目标类型:System.Decimal


在撰写本文时,在绑定时没有内置转换(但这已经完成),因此绑定系统不知道如何将您的
首付
字段(十进制)转换为
条目的.Text
(字符串)

如果
单向
绑定是您所期望的,那么字符串转换器将完成这项工作。这对于
标签
,非常有效:

downPayment.SetBinding(Entry.TextProperty,新绑定(“downPayment”,stringFormat:“{0}”);
对于
条目
,您希望绑定在两个方向上都工作,因此您需要一个转换器:

公共类小数转换器:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
if(值为十进制)
返回value.ToString();
返回值;
}
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
十进制小数;
if(decimal.TryParse(值为字符串,out dec))
返回12月;
返回值;
}
}
现在,您可以在绑定中使用该转换器的实例:

downPayment.SetBinding(Entry.TextProperty,新绑定(“downPayment”,converter:new DecimalConverter());
注意:


OP的代码应该在1.2.1及以上版本中开箱即用(根据Stephane对问题的评论)。这是低于1.2.1版本的变通方法。谢谢!如果您试图输入小数点,这个简单的转换器就会崩溃point@codeConcussion一切由你决定。如果您使用转换器转换用户条目,这可能很好,因为您希望用户和应用程序当前区域性相同。现在,如果您希望使用US格式的值,您可以使用
TryParse(值为string,NumberStyles.Number,CultureInfo.InvariantCulture,out-dec)
ToString()
@Stephane上的类似技巧,很抱歉不清楚。问题不是小数点,Xaramin中的问题是每次击键都会触发绑定(没有像WPF中那样的UpdateSourceTrigger=LostFocus,AFAIK)。因此,如果您想输入“1.23”,请键入“1”(工作正常),然后“.”(“1.”解析正常,但转换器会去掉小数)。所以,要输入“1.23”,我必须输入“123”,然后返回并输入小数点。哦,好的!使用OneWayToSource绑定可以避免这种情况,或者实现viewModel时,如果未更改值,则不会触发PropertyChanged,如中所示。注意:这在版本1.2.1和更高版本中应该是现成的