Timepicker Updatesourcetrigger=propertychanged doe

2020-04-07 18:05发布

问题:

I'm hosting a WPF usercontrol in a windows form In the wpf user control I am using a timepicker from wpfToolkit.extended

If I use the up or downkeys or just enter a time in the textfield the source is not updated allthough I am using Updatesourcetrigger = propertychanged.

When I select a time in the dropdrownlist everything works the way it should. This is the namespace of the toolkit.

xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=WPFToolkit.Extended"

This is the xaml for the timepicker

  <xctk:TimePicker  Format="LongTime" TimeInterval="00:15:00.000" Value="{Binding Path=StartTime, UpdateSourceTrigger=PropertyChanged}" ></xctk:TimePicker>

If I click outside the WPFusercontrol without changing the focus to another control in the wpf usercontrol first. The Binded time is not updated.

Any idea how I can fix this?

回答1:

Found a solution for this problem: I've given the TimePicker a name (In this case 'tpFrom') then I've used the TextBoxBase.TextChanged event on the TimePicker. This is what the Xaml looks like now:

<xctk:TimePicker Name="tpFrom"  Format="LongTime"  TextBoxBase.TextChanged="TimePicker_TextChanged"  TimeInterval="00:15:00.000" Value="{Binding Path=StartTime, UpdateSourceTrigger=PropertyChanged}"></xctk:TimePicker>

In the code behind in our eventhandler we'll put the focus on our timepicker.

  private void TimePicker_TextChanged(object sender, TextChangedEventArgs e)
    {
        tpFrom.Focus();            
    }

Now everytime the text changes, the value changes as well and the problem is solved :-)



回答2:

Does the TimePicker have a Text property? If so, try binding to that instead.

I think this behavior might be to prevent you from binding to a bad datetime as you type. I would guess that when focus is lost it tries to set the property and does error checking. If it did this while you typed it would constantly be changing the value anytime you make a change (say delete a character).

Is there something specific you are trying to do as you type?