Silverlight 5 DatePicker binding behavior issue

11 posts, 0 answers
  1. Thomas
    Thomas avatar
    7 posts
    Member since:
    Oct 2011

    Posted 21 Feb 2012 Link to this post

    This code worked in SIlverlight 4. The only thing I did was upgrade to the S5 telerik controls, and now the control is failing.

    Here is the xaml:

    <telerik:RadDatePicker SelectedDate="{Binding WeekEndingDate, Mode=TwoWay}" Grid.Row="0" Grid.Column="1" Width="100" HorizontalAlignment="Left" DisplayFormat="Short" InputMode="DatePicker"/>

    Here is the viewmodel property setter code.
    public DateTime? WeekEndingDate
    {
    get
    {
    return this.weekEndingDate;
    }
    set
    {
    if (value != null)
    {
    if (this.weekEndingDate != value)
    {
    DateTime newDate = (DateTime)value;
    DateTime selectedWeekEnding = newDate.AddDays(DayOfWeek.Saturday - newDate.DayOfWeek);
    this.weekEndingDate = selectedWeekEnding;
    this.WeeklyInput = this.weeklyInputs.Where(wi => wi.WeekEntry == selectedWeekEnding).FirstOrDefault();
    this.OnPropertyChanged("WeekEndingDate");
    }
    }
    }
    }


    What I am doing is, whichever date the user selects on the calendar, it adjusts the date to the Saturday of the selected week. Again, this code worked in S4 version. With the upgrade, the property value is changing, the WeeklyInput entity with the right saturday date is found, but the Date text on the control is not changing to the new value of the property.

    Is there a way I can do this with the new version that is better than what I have implemented?
    Thank you,

    - Thomas.
  2. Ivo
    Admin
    Ivo avatar
    390 posts

    Posted 24 Feb 2012 Link to this post

    Hello,

    What version did you previously used? I tested this with 2011 Q2 SL4, 2011 Q3 SL4 and 2012 Q1 SL4 and it behaved the same way with all of these. We believe this is expected Silverlight behavior. When the UI changes the ViewModel it is smart enough not to get notified, about this change. You can test it with a sample TextBox control and it will behave the same way.

    Greetings,
    Ivo
    the Telerik team
    Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
  3. DevCraft banner
  4. Thomas
    Thomas avatar
    7 posts
    Member since:
    Oct 2011

    Posted 24 Feb 2012 Link to this post

    I left out the details about the notification implementation, believing the "OnPropertyChanged" implementation is standard and would be understood. The ViewModel implements the INotifyPropertyChanged interface, and OnPropertyChanged is the implementation that tells the control to refresh its DependencyProperty via a PropertyChangedEventHandler. But the control is not updating since I upgraded the controls to S5.

    However, I've discovered the same problem with the sdk version of the DatePicker, so this clearly isn't a RadDatePicker issue. Interestingly, if I put two RadDatePickers on the page and bind them to the same property, the one I am not selecting from does get updated via the Notification. So it has something to do with the one picker being in an editing state or something. Maybe it's a Silverlight 5 issue. I will investigate since the problem isn't limited to the Telerik control. Thanks.
  5. Ivo
    Admin
    Ivo avatar
    390 posts

    Posted 27 Feb 2012 Link to this post

    Hello,

    The problem actually is that you are updating the source for the Binding while the Binding is updating your property. As I said the dependency property is clever enough not to get updated when it is updating your property. You can find a sample project demonstrating the same behavior in Silverlight 4 with two TextBoxes. This could be workarounded by calling the OnPropertyChanged into a dispatcher.

    Greetings,
    Ivo
    the Telerik team
  6. Ben
    Ben avatar
    1 posts
    Member since:
    Jun 2012

    Posted 26 Jun 2012 Link to this post

    Have you found a solution? I just recognized this strange behavior that you've reported and I am 100% sure that a few months ago everything was ok.
  7. Ivo
    Admin
    Ivo avatar
    390 posts

    Posted 27 Jun 2012 Link to this post

    Hi Ben,

    This sounds really strange. I have just tested it with Q2 2011, Q3 2011, Q1 2012 and Q2 2012 and the behavior was absolutely the same with all of them. As I mentioned before this is the expected behavior and it can be easily reproduced with a simple TextBox too.

    Kind regards,
    Ivo
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

  8. Rob Ainscough
    Rob Ainscough avatar
    172 posts
    Member since:
    Jan 2010

    Posted 04 Sep 2012 Link to this post

    I'm having this problem also with SL5 ... both the SDK:DatePicker and the telerik:RadDatePicker ... they will not display my binding.  I've tried converters and still nothing works??  I have no problem binding same viewmodel to a textbox, so what gives here?

    <telerik:RadDatePicker x:Name="DateDatePicker" Grid.Column="1" Grid.Row="4" SelectedDate="{Binding Path=TodoList.ToDoSystemDate, Mode=TwoWay}" Margin="2"/>


    I'm running v.2012.2.725.1050 and I'm implementing INotifyPropertyChanged.

    The underlying viewmodel property is of type Date (VB.NET).

    Rob.

  9. Rob Ainscough
    Rob Ainscough avatar
    172 posts
    Member since:
    Jan 2010

    Posted 04 Sep 2012 Link to this post

    Discovered the problem ... if the value from the ViewModel is of type "Date" and contains "any" time element as part of the Date, you MUST set the InputMode="DateTimePicker".   In further testing, it appears that DatePicker will not work (Binding) with any "Date" types (VB) at all when the InputMode="DatePicker".

    Now this doesn't make much sense to me because the DisplayFormat = "Short", so why would the telerik:RadDatePicker just toss away the binding value??  What's even worse is that it doesn't trigger any binding errors so I can't use that to help me debug why this didn't work.  Is this a known bug because it would be a TALL stretch to suggest this is "by design" ;)

    Rob

  10. Ivo
    Admin
    Ivo avatar
    390 posts

    Posted 05 Sep 2012 Link to this post

    Hi Rob,

    I am not sure I completely understand the issue you experience. It would be great if you open a new support ticket and attach a sample project there.

    Regards,
    Ivo
    the Telerik team

    Explore the entire Telerik portfolio by downloading Telerik DevCraft Ultimate.

  11. Rob Ainscough
    Rob Ainscough avatar
    172 posts
    Member since:
    Jan 2010

    Posted 05 Sep 2012 Link to this post

    The issue is simple:
    If a date value includes time (i.e. Dim myDate as Date = #1/1/2012 12:15:00 AM#) and the RadDatePicker.InputMode = "DatePicker" the binding will fail (note it will NOT generate any Binding error).

    The solution is simple:
    The RadDatePicker.InputMode MUST always be set to "DateTimePicker" in order for Binding to work.

    Don't really have time to attach projects and can't provide existing real world projects due to confidentiality.  But I didn't expect RadDatePicker to simply reject the binding especially when the DisplayFormat="Short" ... in other words RadDatePicker is much more rigid with Binding input than it should be ... especially considering the existance of a DisplayFormat property.  I would have expected the RadDatePicker to have accepted the binding data even when InputMode="DatePicker" and simply NOT display the time portion per the DisplayFormat="Short" setting ... what I didn't expect was it to display nothing/blank and not trigger any error at all.  This makes my debugging EXTREMELY difficult.

    I'm not really picking on Telerik as this appears to be a common problem with Silverlight in general ... one never really knows what restrictions happen with Binding, sometimes it's flexible, sometimes it's not.  It's a case of "trial and error" because once again, a serious lack of documentation and good usage examples.  Again, not picking on Telerik because Microsoft are just as bad with their documentation.  It almost feels like it's intentional, so that someone can write a book and make some money ;)  But sadly, I've read most of the books and none of them really get into details like this.

    Rob
  12. Ivo
    Admin
    Ivo avatar
    390 posts

    Posted 11 Sep 2012 Link to this post

    Hello Rob,

    I believe that the behavior you describe is related to the RadDatePicker parsing logic and not a binding issue. The RadDatePicker with InputMode="DatePicker" will not expect a time portion into the input value and the control will not successfully parse it. If you write custom parsing logic this will work the way you expect. Another simpler solution that you already mentioned is to set the InputMode to DateTimePicker.

    All the best,
    Ivo
    the Telerik team

    Explore the entire Telerik portfolio by downloading Telerik DevCraft Ultimate.

Back to Top
DevCraft banner