Подтвердить что ты не робот

DatePicker.SelectedDate не изменяется при вводе текста

Когда мои пользователи выбирают дату с помощью элемента управления 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}"/>

HELP! как я могу убедиться, что это введенное значение используется в коде событий кнопок?

Спасибо!

4b9b3361

Ответ 1

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

Пример

 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

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

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

<DatePicker x:Name = "dpDisbursementDate" 
            Text = "{Binding NameOfMyProperty, Mode=TwoWay,    
            UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, 
            TargetNullValue=''}"/>

Ответ 3

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

Ответ 4

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

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

xml:lang="de-AT"

а datepicker выглядит так:

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

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

Ответ 5

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

Если у вас есть другой элемент WPF, вы можете сменить фокус на то, что в начале нажатия кнопки нажмите, это сделает процесс datepicker любым текстом, введенным в него текстовым полем. Я только пробовал это с помощью combobox, но, похоже, он работает, и он позволяет вам по-прежнему иметь настраиваемое форматирование на ваших датах (то есть 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();
        }
    }