I am using a RadMaskedDateTimeInput control in my application. It is being used in a RadGridView's CellEditTemplate edit mode and the value is bound to a TimeSpan object with the property [ Mask = HH:mm ]
When I enter edit mode in run time it seems to be displaying/bound to Today.Now and/or DateTime.Now (It is only showing the current Hour/Minutes). Is this a known bug or should I be using another InputMask control to accomplish this. I only want to see the correct time in this format 00:00 [HH:mm]
Thanks!
8 Answers, 1 is accepted
RadMaskedDateTimeInput uses internally DateTime? (nullable DateTime) property to store its Value.
In other words, the Value property of this control is from type DateTime? and it cannot be directly bound to TimeSpan property. At least you need a converter. Since your binding does not succeed (due to mismatch of types), the fallback value which is DateTime.Now is being used.
So our advice is to bind the Value of the DateTimeInput to property of type DateTime?. Let us know if this fits well in your scenario.
Petar Mladenov
Telerik
Explore the entire Telerik portfolio by downloading Telerik DevCraft Ultimate.


I know this is an old post, but I am doing an update anyway. I have this type of binding which have solved with a converter. I think it has been working earlier, but today I noticed that I got DateTime.Now as value in my RadMaskedDateTimeInput. The binding is working except for the initial value which is set to DateTime.Now in UI.This value is not propagated to the binding, but when I edit the UI I get the right value.
I set the Duration to 20 min by default but still I only get DateTime.Now. I have tried to bind to a DateTime? property without the converter but I still only get DateTime.Now in my UI.
Here is the control:
<
telerik:RadMaskedDateTimeInput
x:Name
=
"DurationInput"
EmptyContent
=
"{dt:Text HHMM}"
InputBehavior
=
"Replace"
Mask
=
"HH:mm"
SelectionOnFocus
=
"SelectAll"
TextMode
=
"PlainText"
UpdateValueEvent
=
"LostFocus"
Value
=
"{Binding Duration, Mode=TwoWay, Converter={StaticResource TimeSpanDateTimeConverter}}"
/>
And this is my converter:
using
System;
using
System.Globalization;
using
System.Windows.Data;
public
class
TimeSpanDateTimeConverter : IValueConverter
{
public
object
Convert(
object
value, Type targetType,
object
parameter, CultureInfo culture)
{
// TimeSpan in
if
(!(value
is
TimeSpan))
{
return
default
(DateTime?);
}
var timeSpan = (TimeSpan) value;
// DateTime out
if
(targetType !=
typeof
(DateTime?))
{
return
null
;
}
var nowDate = DateTime.Now.Date;
return
nowDate + timeSpan;
}
public
object
ConvertBack(
object
value, Type targetType,
object
parameter, CultureInfo culture)
{
// DateTime in
var dateTime = (DateTime?) value;
// TimeSpan out
return
targetType !=
typeof
(TimeSpan?)
?
null
: dateTime?.TimeOfDay;
}
}
And this is my view-model property:
public
TimeSpan? Duration
{
get
=> _duration;
set
{
SetProperty(
ref
_duration, value);
}
}
I am using Telerik 2020.1.115.
Best regards
Ola
Hi Ola,
Your converter adds 20 minutes timespan to a datetime which does not take into account the hours, minutes and seconds.
var nowDate = DateTime.Now.Date; //- this returns date with time 12:00. return nowDate + timeSpan; // - this returns unexpected result
Immediate window:
nowDate + timeSpan
{3/22/2020 12:20:00 AM}
Date: {3/22/2020 12:00:00 AM}
Day: 22
DayOfWeek: Sunday
DayOfYear: 82
Hour: 0
Kind: Local
Millisecond: 0
Minute: 20
Month: 3
Second: 0
Ticks: 637204332000000000
TimeOfDay: {00:20:00}
Year: 2020
What I can suggest is using DateTime.Add method and this way add datatime.Now and the rimespan
var nowDate = DateTime.Now.Add(timeSpan);
return nowDate;
Petar Mladenov
Progress Telerik

I don't agree. DateTime.Now.Date returns a DateTime holding midnight today. Just the way I want it.
> Console.WriteLine(DateTime.Now.Date + TimeSpan.FromMinutes(20))
2020-03-23 00:20:00
>
And if I instead use a fixed DateTime pointing at midnight I get the same behavior in RadMaskedDateTimeInput. As I pointed out in my previous post the binding and converter works, but the control still displays DateTime.Now as initial value. This value is not reflected to my view-model but if I edit the value it is reflected to the view-model. Besides, I think the whole implementation was working when I first implemented it some time ago. Have you verified that you dont have any issues in RadMaskedDateTimeInput?
Best regards,
Ola
Hi Ola,
I first misunderstood your requirement, I thought you needed to display the hour and minutes of a time 20 minutes from now. That is why I suggested the code which uses the "Add" method.
Today I tested your code against 3 major versions - 2012 R3, 2017 R1 and 2020 R1 SP (our latest official). I get exactly the opposite of yours. In 2012 control seems broken and displays DateTime.Now initially and looks fixed in 2017 (I can precisely find the fix if needed) and in 2020 - controls shows
"00:20" initially - I guess this is exactly what you expect. I have attached here my test project so you can check if there are any differences with yours. Please let me know if I am missing something.
Regards,
Petar Mladenov
Progress Telerik
Our thoughts here at Progress are with those affected by the outbreak.

Alright, now I got some time to look at this again and I was able to pinpoint the problem.
In one dialog I got the RadMaskedDateTimeInput first in order, which means that the initial focus is set to this control. If I set the property UpdateValueEvent="LostFocus" on the RadMaskedDateTimeInput, the initial value is not propagated to the control. If I instead have UpdateValueEvent="PropertyChanged" or have another control first in order the value is set on the control.
Is this expected behavior?
Hi Ola,
Can you replicate the described behavior in an isolated sample that we can look and eventually provide you with solution ?
Currently, in the last project we sent you the initial value of the UpdateValueEvent property is LostFocus and value on load is formatted "00:20" as expected.
Regards,
Petar Mladenov
Progress Telerik
Our thoughts here at Progress are with those affected by the outbreak.