Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 输入文本时DatePicker.SelectedDate不更改_Wpf_Text_Datepicker_Wpftoolkit - Fatal编程技术网

Wpf 输入文本时DatePicker.SelectedDate不更改

Wpf 输入文本时DatePicker.SelectedDate不更改,wpf,text,datepicker,wpftoolkit,Wpf,Text,Datepicker,Wpftoolkit,当我的用户通过DatePicker中的Calander控件选择日期时,该值将正确绑定到基础对象。但是,如果用户在日期选择器中键入日期,然后单击按钮,则文本不会设置为SelectedDate属性 用户必须从DatePicker中的文本框中删除光标,才能更新绑定对象 <toolkit:DatePicker Name="_dpField" Grid.Column="1" MinWidth="100" ToolTip="{Binding Path=ToolTipTe

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

用户必须从DatePicker中的文本框中删除光标,才能更新绑定对象

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

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


谢谢

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

样本

 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;

    }
Xaml

     <Controls:DatePicker 
     Text="{Binding OrderDate,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
     SelectedDate="{Binding RelativeSource={RelativeSource Self},Path=Text,
     Converter={StaticResource DateConverter}}">

我找到了一个更简单的解决方案,不需要
日期转换器

我只绑定到
Text
属性,并使用
TargetNullValue=''



我能找到的唯一解决方案是通过设置
Focusable=“False”
禁用在日期选择器中输入日期,并且只允许从日历中进行选择。这样我们至少可以确保我们得到了正确的日期

这可能有点晚了,但我已经坚持了一段时间了

如果您有另一个WPF元素,您可以将焦点更改为按钮按下事件开始时的焦点,这将使日期选择器处理在其文本框中输入的任何文本。我只在组合框中尝试过,但它似乎有效,并且它允许您在日期上仍然有自定义格式(即2016年4月26日,而不是2016年4月26日)。我假设如果你没有任何改变焦点的东西,你也可以使用一个不可见的元素

    private void btnInbound_Complete_Click(object sender, RoutedEventArgs e)
    {
        if (Validation())
        {
            comboInbound_Result.Focus();//THIS IS SO THAT ANY MANUAL DATEPICKER ENTRY IS ACCEPTED BEFORE THE REST OF THE BUTTON CODE IS RUN
            SQLinbound_CompleteItem();
            ClearAll();
        }
    }

这里有一个简单的解决方案,它甚至可以帮助我使用欧洲/德国日期格式“dd.MM.yyyy”

添加到xaml根元素

xml:lang="de-AT"
日期选择器如下所示:

<DatePicker SelectedDate="{Binding PropertyName, StringFormat=dd.MM.yyyy}" Name="datePicker" />


希望它对你有用

明白了,我能做到。我只是好奇,为什么只有当我故意模糊日期选择器的文本框时,才会出现所选日期的绑定。我想我需要问另一个关于WPF的click事件的问题,以及为什么它不会导致绑定在触发按钮单击事件之前将值向上推到绑定对象。感谢刚刚实现转换器的帮助更新,它可以正常工作。现在开始一个关于绑定模式的新问题,并单击事件。我使用该方法,但它不起作用,因为如果我在UI上输入文本,它需要ConvertBack方法。对我不起作用。当DatePicker值为空时,总是在值“”上获得ValidationErrors。唯一有效的解决方案是绑定死亡日期时间?属性设置为Text并设置TargetNullValue='',就像下面@Slampenthat给出的答案一样,这是非常狡猾的!那真是太棒了!这个答案似乎解决了最初的问题,但还有一个危险的问题,这个问题并没有立即显现出来:不同的日期格式没有正确解析。我来自芬兰,我们使用dd.mm.yyyy格式。此实现将当前日期2014年12月9日解析为2014年9月11日。我尝试过此方法,但发现了与Ville Salonen相同的问题。那么,有人找到其他解决办法了吗?救了我一天…:)(我也看到了区域设置的影响,但在我的实际用例中,我不必费心……)这对我们来说是可行的,但我们需要在文本上放置StringFormat,而不是SelectedDate。我使用了比“dd.MM.yyyy”更标准的\d:
<DatePicker SelectedDate="{Binding PropertyName, StringFormat=dd.MM.yyyy}" Name="datePicker" />