Есть вот такой ComboBox который по дизайну должен содержать только даты в формате MM/dd/yyyy:
<System:String x:Key="dateTimeFormat">{0:d}</System:String>
...
<ComboBox ItemsSource="{Binding Source={StaticResource Dates}}"
Text="{Binding EndDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource DateFromDateTimeConverter},
ValidatesOnDataErrors=True, ValidatesOnExceptions=True, NotifyOnValidationError=True,
StringFormat={StaticResource DateTimeFormat}}"
IsEditable="True"
/>
В Dates находится DateTime[], EndDate имеет тип DateTime, DateFromDateTimeConverter конвертер делает следующее:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is DateTime)
return ((DateTime)value).ToString("MM/dd/yyyy", culture);
else
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is string)
{
DateTime result;
if (DateTime.TryParseExact(value.ToString(), "MM/dd/yyyy", culture, DateTimeStyles.None, out result))
return result;
}
return DependencyProperty.UnsetValue;
}
Даты в списке комбика выглядят как: 12/20/2011 — ничего для этого не было сделанно в коде явно, т.е. комбик как-то сам так их форматирует
![](/Forum/Images/confused.gif)
. Что устраивает. Однако после выбора любой даты из комбика она попадает в Text проперти как 12/20/2011 00:00:00 и дёргается ConvertBack() который естественно ставит флаг ошибки. StringFormat игнорируется при наличии Converter
![](/Forum/Images/confused.gif)
.
Вопрос: как заставить комбик форматировать DateTime как "d" при выборе элемента из списка?