Печальная новость заключается в том, что текстовое поле DatePicker установлено для обновления источника привязки только , когда он теряет фокус. Хорошей новостью является то, что вы можете подключиться к процессу с помощью DatePicker
ControlTemplate
:
XAML:
И код за:
DateTime? _dateVal = DateTime.Today;
public Nullable DateVal
{
get { return _dateVal; }
set
{
if (_dateVal == value)
return;
_dateVal = value;
OnPropertyChanged("DateVal");
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
DatePickerTextBox pickerTextBox = __picker.Template.FindName("PART_TextBox", __picker) as DatePickerTextBox;
if (pickerTextBox == null)
return;
pickerTextBox.TextChanged += new TextChangedEventHandler(pickerTextBox_TextChanged);
}
void pickerTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
DatePickerTextBox tb = sender as DatePickerTextBox;
if (tb == null)
return;
if (string.IsNullOrEmpty(tb.Text))
{
__picker.SelectedDate = null;
}
}
Я просто искал ее, и я предполагаю, что причина, по которой вы не получаете более частые обновления, - это круговое отношение между текстом и выбранными свойствами даты. Тем не менее, убедитесь, что мы получаем обновления для null DateTimes.
<Сильный> ИЗМЕНИТЬ
Обновлен обработчик события, чтобы обновить свойство pickers SelectedDate
, а не свойство в модели представления. Таким образом, вы можете полностью удерживать хак в рамках представления, оставаясь агностиком viewmodel.