Hey,
I have a few questions related to the XamNumericEditor:
When I first tried binding an int to the XamNumericEditor I got the following error in the output:
System.Windows.Data Error: 22 : Cannot convert '1' from type 'Double' to type 'System.Int32' for 'en-US' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: Int32Converter cannot convert from System.Double. at System.ComponentModel.TypeConverter.GetConvertFromException(Object value) at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)'
This goes away if I set the ValueType property to Int32. My question is: do I have to set ValueType or is it possible to have it automatically determined?
Also, when I completely clear the text in the XamNumericEditor (with ValueType=Int32), it does not set 0 in the underlying property. So, it looks like the value is empty, but it is still there. What is the best way to get around this?
Thanks
Just to help anyone -- the above post works for null value text -- here's an example of what I've done that works for us:
<igEditors:XamNumericEditor Name="txtSpeed" Width="50" EditModeStarted="Numeric_EditModeStarted" ToolTip="RPMs must be between 200 and 3600." NullText="" Text="{Binding Path=EngineTests[0].Speed}" Value="{Binding Path=EngineTests[0].Speed}" Mask="nnnn" EditModeValidationError="txtSpeed_EditModeValidationError"> <igEditors:XamNumericEditor.ValueConstraint> <igEditors:ValueConstraint ValidateAsType="Integer32" MinInclusive="200" MaxInclusive="3600"></igEditors:ValueConstraint> </igEditors:XamNumericEditor.ValueConstraint> </igEditors:XamNumericEditor>
It's a pitty that xamNumericEditor doesn´t get the type of the bound property automatically. This means more work for developers each time a xamNUmericEditor is used in the form. Maybe in next release?
If you bind to Text property instead of Value, the set method of the property is triggered every time that the control gets or loses focus, or thw window is closed. If you bind to Value, the set method only is executed when the property actually changes.
I've found that if I both bind my properties to Text instead of Value and if I set Text = 0 when Text is null or empty after edit mode ends (via the event handler), then both of my problems are solved.
Thank you for all of your help with this.
I believe that has to be handled by the EditModeStarted/ing and EditModeEnded/ing events. As you have many editors, you can use the EventManager.RegisterClassHandler method do hook them up all at once, and perform this logic there (check for the value, conver value, set text if the ValueEditor has invalid value, etc..)
Alex.
Sorry for the delayed response. Yes, when the text is cleared, it can't parse an int so it goes to Binding.DoNothing. My concern is that it looks like the data is cleared when it really isn't.
If I use the control as it is intended to be used (which I assume means that I need to set ValueType), is there any built in way to prevent this clearing confusion? I tried setting InvalidValueBehavior = "RevertValue" since I figured an empty value is invalid for an int and that it would revert the text back to what it was, but it didn't work.