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! как я могу убедиться, что это введенное значение используется в коде событий кнопок?
Спасибо!
Ответы
Ответ 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();
}
}