Approved
Last Updated: 26 Sep 2019 08:49 by ADMIN
Travis
Created on: 18 Sep 2019 21:16
Category: NumericInput
Type: Bug Report
1
RadNumericInput decimal

I have a Xamarin.Forms app, but I only am using it for UWP at the moment. The plan is to have Android and iOS later, but I am having issues with the RadNumericInput (Xamarin.Forms) and how the decimal key is handled.

Here is my XAML


<tkInput:RadNumericInput Grid.Row="4" Grid.Column="1" Value="{Binding Price, Mode=TwoWay}" StringFormat="{}{0:C2}" />


Right now, "Price" will default to 0. The UI will initially show $0.00 because of the StringFormat. That is working fine. When I put focus into the control, I only see 0, that is also fine. The issue is when I try to type a decimal. The value disappears and I see an issue in my Output that says -- Binding: can not be converted to type 'System.Int32'

 

Example steps:

  • With the value set to 0.00
  • Focus the control -- you will now see just 0
  • Press the decimal key (aka the period key)
  • Notice the error in the Output window in VS and also the control shows nothing at all
  • If you press the decimal key again, you will see two decimals in the control

**** Also, the Version of the Telerik controls I am using is -- 2019.2.603.360. The drop down below doesn't let me choose that version.

4 comments
ADMIN
Yana
Posted on: 26 Sep 2019 08:49

Hi Travis,

I am sorry for the delayed reply. 

We looked into the issue and indeed, the decimal separator is not handled correctly inside RadNumericInput on UWP ( the erroneous behavior is not reproduced on Android and iOS). I am afraid I could not offer a workaround as this concerns the internal logic of the control.

I understand this issue makes it impossible to enter decimal values in the NumericInput, so I've raised this item's priority and hopefully we'll manage to resolve it soon.

I am sorry for any inconvenience caused.

Regards,
Yana
Progress Telerik

Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
ADMIN
Lance | Principal TSE
Posted on: 20 Sep 2019 23:10

Hello Travis,

Thank you for the demo, I can confirm the behavior where all the NumericInput's entered characters are cleared if the user enters a decimal point. The only time it doesn't get reset if there are only multiple decimal points entered.

I have escalated this to the development team and marked the issue Approved. I am unable to find any workaround at the moment. There might be something that can be done with  the NumericInputEntry itself (inside the ControlTemplate see here), but I will need to defer to the team to follow up with you on that.

Thank you for your patience and understanding.

Unrelated Fix

Regarding the output error, as I suspected that can be resolved with a converter. Since the Price property is of type decimal, the converter should be this:

public class DecimalToDoubleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return System.Convert.ToDouble((decimal)value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return System.Convert.ToDecimal((double?)value);
    }
}

and the XAML would now be:

<ContentPage ...>
 <ContentPage.Resources>
 <views:DecimalToDoubleConverter x:Key="DecToDblConverter" />
 </ContentPage.Resources>

 <StackLayout>
 <telerikInput:RadNumericInput x:Name="numericInput"
                                      Value="{Binding Price, Mode=TwoWay, Converter={StaticResource DecToDblConverter}}"
                                      StringFormat="{}{0:C2}" />
 </StackLayout>
</ContentPage>

Regards,


Lance | Technical Support Engineer, Principal
Progress Telerik

Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
Travis
Posted on: 20 Sep 2019 00:26

I have attached a sample app that produces the same issues as I mentioned in my original post's Example steps.

 

I just generated a Xamarin.Forms app with just UWP and then added in the NumericEntry control. Please unzip and follow my Example steps to see the issue.

ADMIN
Lance | Principal TSE
Posted on: 18 Sep 2019 23:41

Hello Travis,

I did not see an attached (or download link for) a reproducible project to follow those steps. Can you please share the data model that contains the Price property? According to the error, it is trying to convert a double? (Value is a nullable double) to an int.

If Price is indeed an int (or any type other than double?), the problem can be averted by using a value converter to bridge the gap between the model's property type and the required type.

For example:

// See https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/converters for more information on writing a converter

public class MyIntToDoubleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Convert.ToDouble((int)value); 
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Convert.ToInt((double?)value);
    }
}

It would be used like this

<ContentPage.Resources>
    <yourNamespace:MyIntToDoubleConverter x:Key="IntToDoubleConverter" />
</ContentPage.Resources>

<tkInput:RadNumericInput Grid.Row="4" Grid.Column="1" Value="{Binding Price, Mode=TwoWay, Converter={StaticResource IntToDoubleConverter}" StringFormat="{}{0:C2}" />

Further Investigation

If it is indeed a double, then please reply with the data model and I will build a test app around it. It would also be useful to know the following platform specifics:

  • What is the Min SDK and Target SDK versions for UWP?
  • What Windows 10 version is the app running on?
  • What version of Xamarin.Forms is the project using?

Version Number

Regarding the version selection, it is the first three numbers that distinguish the release ([year].[releasenumber].[monthday]). You can use the following selection in the future:

Regards,
Lance | Technical Support Engineer, Principal
Progress Telerik

Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items