RadMaskedDateTimeInput Edit Mode Displays Current Time Only

9 posts, 1 answers
  1. Jacob
    Jacob avatar
    6 posts
    Member since:
    Mar 2013

    Posted 11 Jun 2013 Link to this post

    Hi Telerik,

    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!
  2. Answer
    Petar Mladenov
    Admin
    Petar Mladenov avatar
    3147 posts

    Posted 13 Jun 2013 Link to this post

    Hello Jacob,

     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.

    Regards,
    Petar Mladenov
    Telerik

    Explore the entire Telerik portfolio by downloading Telerik DevCraft Ultimate.

  3. Jacob
    Jacob avatar
    6 posts
    Member since:
    Mar 2013

    Posted 13 Jun 2013 Link to this post

    This is exactly it. Thank you! :)
  4. Ola
    Ola avatar
    26 posts
    Member since:
    Jun 2014

    Posted 19 Mar in reply to Petar Mladenov Link to this post

    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

     

     

  5. Petar Mladenov
    Admin
    Petar Mladenov avatar
    3147 posts

    Posted 22 Mar Link to this post

    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;
    Regards,
    Petar Mladenov
    Progress Telerik

    Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
  6. Ola
    Ola avatar
    26 posts
    Member since:
    Jun 2014

    Posted 23 Mar Link to this post

    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

  7. Petar Mladenov
    Admin
    Petar Mladenov avatar
    3147 posts

    Posted 26 Mar Link to this post

    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

    Progress is here for your business, like always. Read more about the measures we are taking to ensure business continuity and help fight the COVID-19 pandemic.
    Our thoughts here at Progress are with those affected by the outbreak.
  8. Ola
    Ola avatar
    26 posts
    Member since:
    Jun 2014

    Posted 17 Apr in reply to Petar Mladenov Link to this post

    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?

  9. Petar Mladenov
    Admin
    Petar Mladenov avatar
    3147 posts

    Posted 20 Apr Link to this post

    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

    Progress is here for your business, like always. Read more about the measures we are taking to ensure business continuity and help fight the COVID-19 pandemic.
    Our thoughts here at Progress are with those affected by the outbreak.
Back to Top