输入文本时,DatePicker.SelectedDate不会更改

Nat*_*lus 14 wpf text datepicker wpftoolkit

当我的用户通过DatePicker中的Calander控件选择日期时,该值将正确绑定到基础对象.但是,如果用户在DatePicker中键入日期,则单击按钮,文本不会设置为SelectedDate属性.

用户必须从DatePicker中的TextBox中移除光标,以便更新绑定对象.

 <toolkit:DatePicker Name="_dpField" Grid.Column="1" MinWidth="100"
               ToolTip="{Binding Path=ToolTipText}"
               TextInput="_dpField_TextInput"
               SelectedDate="{Binding Path=Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
Run Code Online (Sandbox Code Playgroud)

救命!如何确保在按钮事件代码中使用此类型的值?

谢谢!

Sla*_*pen 18

我发现了一个更简单的解决方案,我不需要DateConverter.

我只绑定了Text财产并使用TargetNullValue=''.

<DatePicker x:Name = "dpDisbursementDate" 
            Text = "{Binding NameOfMyProperty, Mode=TwoWay,    
            UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, 
            TargetNullValue=''}"/>
Run Code Online (Sandbox Code Playgroud)

  • 这个答案似乎解决了原始问题,但还有一个危险的问题并不是立即明显的:不能正确解析不同的日期格式.我来自芬兰,我们使用格式dd.mm.yyyy.此实现解析当前日期为2014年12月9日,即2014年9月11日. (3认同)

bij*_*iju 7

您可以使用转换器将键入的文本解析为有效的日期时间

样品

 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string strValue = System.Convert.ToString(value);
        DateTime resultDateTime;
        if (DateTime.TryParse(strValue, out resultDateTime))
        {
            return resultDateTime;
        }
        return value;

    }
Run Code Online (Sandbox Code Playgroud)

XAML

     <Controls:DatePicker 
     Text="{Binding OrderDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
     SelectedDate="{Binding RelativeSource={RelativeSource Self},Path=Text,
     Converter={StaticResource DateConverter}}">
Run Code Online (Sandbox Code Playgroud)