Error while updating RadNumericUpDown

5 posts, 1 answers
  1. joshua odell
    joshua odell avatar
    30 posts
    Member since:
    Sep 2008

    Posted 19 Aug 2009 Link to this post

    Hello, I've discovered an issue, and I'd like to see if this is some sort of desired behavior or a bug.  Here's the deal,  I've got a bunch of RadNumericUpDown controls, each lies within a UserControl.  and that UserControl is bould to an object. the RadNumericUpDown XAML looks like this.

            <telerik:RadNumericUpDown Grid.Column="1"  
                                      x:Name="inpPMax" Style="{StaticResource InputNumbers}" 
                                      ValueFormat="Numeric" NumberFormatInfo="{Binding Path=DisplayFormat}" 
                                      IsEnabled="{Binding Path=UserEntered}" 
                                      Minimum="{Binding Path=Minimum}" Maximum="{Binding Path=Maximum}" 
                                      SmallChange=".1" LargeChange="1" GotFocus="inpPMax_GotFocus" ValueChanged="inpPMax_ValueChanged"
                <telerik:RadNumericUpDown.Value> 
                    <Binding Path="DisplayValue"  UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True"/> 
                </telerik:RadNumericUpDown.Value> 
            </telerik:RadNumericUpDown> 
     

    and the syle I'm using looks like this
                <Style x:Key="InputNumbers" TargetType="{x:Type telerik:RadNumericUpDown}"
                    <Setter Property="Height" Value="25"/> 
                    <Setter Property="FontSize" Value="12"/> 
                    <Setter Property="Margin" Value="2"/> 
                    <Setter Property="HorizontalContentAlignment" Value="Right"/> 
                    <Style.Triggers> 
                        <Trigger Property="Validation.HasError" Value="true"
                            <Setter Property="ToolTip"  
                                Value="{Binding RelativeSource={RelativeSource Self},  
                                    Path=(Validation.Errors)[0].ErrorContent}"/> 
                        </Trigger> 
                        <Trigger Property="Validation.HasError" Value="false"
                            <Setter Property="ToolTip" Value=""/> 
                        </Trigger> 
                    </Style.Triggers> 
                </Style> 
     

    The behavior I'm noticing is that when I enter "1000" in the text field, the control resets it back to 0, actually it looks like it sets it back to "000.000".  I thought that it might be doing this because I set the min and max values incorrectly, but when I debug into the "inpPMax_ValueChanged" method, I see that the control's max is set to double.maxvalue, and min is set to double.minvalue which means to me that it should't be failing this test.  I've also tried hard coding these values to 0.0, and 10000 respectively, with the same results.

    I've noticed that if I enter 1999 (which is larget then (1000), the control resets the value to "999", to me it seems that the control is only taking the first 3 degits.  One other thing to note is that the binding for NumberFormatInfo looks like this.

            public NumberFormatInfo DisplayFormat 
            { 
                get 
                { 
                    var ret = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone(); 
                    ret.NumberDecimalDigits = DecimalPlaces
                    return ret; 
                } 
            } 
            protected virtual int DecimalPlaces { get { return 0; } } 
     

    This is because some "measurements" require 3 decimal places, while others require 0 and the control just binds to the "measurement"s DisplayFormat property.

    it's going to be difficult to send any more code, but I'd greatly appreciate any help here, and I'll send whatever you ask for, if I can't get this to work I'll have to go back to a textbox, and I really don't want to do that.
  2. Answer
    Hristo Borisov
    Admin
    Hristo Borisov avatar
    298 posts

    Posted 20 Aug 2009 Link to this post

    Hello Joshua,

    First of all, which version of the controls do you use? If you use our latest service pack, you can set the IsInteger property to true. This will ignore the values set from the NumberFormatInfo, and will format your RadNumericUpDown to show integer values. Moreover, you should update the instance of NumberFormatInfo that is already created in the RadNumericUpDown as it internally clones the current culture by default, instead of assigning it a complete new value.

    For the input problem you shouldn't experience any problems if you are using our service pack version. If you still have problems, try setting the decimal separator from your language settings to dot, and tell us if the problem still exists. The reason I am asking you to change this value is because we have found a bug related to this, which we have already fixed and will be available for our internal build tomorrow.

    Thank you for contacting and we look forward to receiving more feedback from your.

    Regards,
    Hristo Borisov
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Check out the tips for optimizing your support resource searches.
  3. UI for WPF is Visual Studio 2017 Ready
  4. joshua odell
    joshua odell avatar
    30 posts
    Member since:
    Sep 2008

    Posted 20 Aug 2009 Link to this post

    Hello Hristo 

    I've updated to the SP version (0813), and I've noticed that my bindings do not work now.  I have a property called "DisplayValue" for the Value property of the control, I've changed it from a double to a double?, I checked this change against the earlier version (07??, I don't remember the exact number) and the bindings work just fine, but when i use the 0813 version the "set" of my property is never called.  
    Is there some change in the way that these values are bound that I need to make?

    please note that the read is working, if I hard code 100.0 to the getter of my DisplayValue property the UI does indeed set the control's display to 100.000, but when I make changes to the UI, either entering a new value with the number pad, or by using the arrows neither update is applied to the bound object's property.

    THank you for your help

    Josh
  5. joshua odell
    joshua odell avatar
    30 posts
    Member since:
    Sep 2008

    Posted 20 Aug 2009 Link to this post

    I've done the following isolated test.  Ii created a new app, put a RadNumericUpDown in it, and databound it to a simple object, here's the code.

    window1.xaml
    <Window x:Class="WpfApplication2.Window1" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
            xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" 
       Title="Window1" Height="300" Width="300"
        <Grid> 
            <telerik:RadNumericUpDown x:Name="Rad" Value="{Binding Path=MyValue}"
                 
            </telerik:RadNumericUpDown> 
        </Grid> 
    </Window> 

    window1.xaml.cs
    namespace WpfApplication2 
        /// <summary> 
        /// Interaction logic for Window1.xaml 
        /// </summary> 
        public partial class Window1 : Window 
        { 
            public Window1() 
            { 
                InitializeComponent(); 
                Rad.DataContext = new Data(); 
            } 
        } 
     

    Data.cs
    namespace WpfApplication2 
        public class Data 
        { 
            private double _myValue; 
            public double MyValue 
            { 
                get 
                { 
                    return _myValue; 
                } 
                set 
                { 
                    _myValue = value
                } 
            } 
        } 
     

    in this example, when the window is loaded the MyValue getter is called, but when I update the UI, using either the arrow keys, or the keyboard the settter is never called.  This leads me to believe that there is just a simple property on the UI that I'm not setting, but there aren't any databinding examples in the example application that is shipped.

    Thanks again for the help.

    Josh
  6. Hristo Borisov
    Admin
    Hristo Borisov avatar
    298 posts

    Posted 21 Aug 2009 Link to this post

    Hello Joshua,

    The problem comes from the way you set the binding expression. You are using a one way binding which is the default one, you should explicitly include Mode=TwoWay. For binding to data values you can check the data binding overview topic in our documentation that explains how to use the binding expressions in Silverlight.

    Greetings,
    Hristo Borisov
    the Telerik team

    Instantly find answers to your questions on the new Telerik Support Portal.
    Check out the tips for optimizing your support resource searches.
Back to Top
UI for WPF is Visual Studio 2017 Ready