Decimal point is being removed in Entry

107 Views Asked by At

My converter is the following

public class DecimalConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is decimal)
                   return value.ToString ();
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
       decimal dec;
       if (decimal.TryParse(value as string, out dec))
           return dec;
       else
           return 0;
    }
}

When I enter a number

Number 55

Next entered the separator

Save as 55

When I enter the decimal

enter image description here

ends as 55

In the view before

Image

after

enter image description here

Resource:

   <support:DecimalConverter x:Key="DecimalConverter" />

Entry defined in the XAML

 <Entry
            BackgroundColor="{TemplateBinding BackgroundColorAmountEntry}"
            IsEnabled="{TemplateBinding IsByAmount}" Keyboard="Numeric"
            Text="{TemplateBinding CommissionWithTaxAmount,
            Converter={StaticResource DecimalConverter}}" />

How could I solve it if I want it to be according to the culture?

1

There are 1 best solutions below

0
Cfun On

You can enforce "en-us" culture for TryParse()

public class DecimalConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is decimal)
                   return value.ToString ();
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
       decimal dec;
        var style = NumberStyles.Number | NumberStyles.AllowDecimalPoint;
        var cultureEnUs = new CultureInfo("en-US");
        if (decimal.TryParse(value as string, style, cultureEnUs, out dec))
           return dec;
       else
           return 0;
    }
}

Alternative approach

When language is set to French, decimal point separator ',' is ignored in binding to a double property