DatePicker.SelectedDate не изменяется при вводе текста - PullRequest
13 голосов
/ 28 декабря 2010

Когда мои пользователи выбирают дату с помощью элемента управления Calander в DatePicker, значение корректно привязывается к базовому объекту.НО, если пользователь вводит дату в DatePicker, а затем нажимает кнопку, текст не устанавливается в свойство SelectedDate.

Пользователь должен удалить курсор из TextBox в 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}"/>

ПОМОЩЬ!Как мне убедиться, что это введенное значение используется в коде события кнопок?

Спасибо!

Ответы [ 5 ]

17 голосов
/ 05 января 2011

Я нашел более простое решение, где мне не нужно DateConverter.

Я привязан только к Text Свойству и использую TargetNullValue=''.

<DatePicker x:Name = "dpDisbursementDate" 
            Text = "{Binding NameOfMyProperty, Mode=TwoWay,    
            UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, 
            TargetNullValue=''}"/>
5 голосов
/ 28 декабря 2010

Вы можете использовать конвертер для анализа введенного вами текста до действительного значения времени

Образец

 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}}">
2 голосов
/ 12 апреля 2016

Единственное решение, которое я смог найти, - отключить ввод даты в DatePicker, установив Focusable="False" и разрешив только выбор из календаря.Таким образом, мы можем по крайней мере убедиться, что мы получаем правильную дату.

1 голос
/ 29 июня 2017

Вот простое решение, которое помогло мне даже с европейским / немецким форматом даты "dd.MM.yyyy".

Добавьте к своему корневому элементу xaml

xml:lang="de-AT"

и средство выбора даты будет выглядеть так:

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

надеюсь, что оно работает для вас!

0 голосов
/ 12 августа 2016

Возможно, это немного поздно, но я застрял на этом некоторое время.

Если у вас есть другой элемент WPF, вы можете изменить фокус на него в начале события нажатия кнопки, это заставит средство выбора даты обрабатывать любой текст, введенный в его текстовое поле. Я пробовал это только с помощью комбинированного списка, но, похоже, он работает, и он по-прежнему позволяет настраивать форматирование дат (например, 26.04.2016, а не 26.04.2016). Я предполагаю, что вы также сможете использовать невидимый элемент, если у вас нет ничего, на что можно было бы изменить фокус.

    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();
        }
    }
...