我将DateTime?
的属性绑定到DatePicker的SelectedDate和DisplayDate属性。它的行为完全符合我的要求,但我在VS Output窗口中注意到了这个错误。
System.Windows.Data Error: 23 : Cannot convert '<null>' from type '<null>' to type 'System.DateTime' for 'en-US' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: 'DateTimeValueSerializer' ValueSerializer cannot convert from '(null)'.
at System.Windows.Markup.DateTimeValueSerializer.ConvertFromString(String value, IValueSerializerContext context)
at System.Xaml.Replacements.DateTimeConverter2.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)'
我已经能够通过将null
转换为DateTime.Now
或其他默认日期来删除错误,但这不是我想要的行为 - 我的DatePicker应该显示“选择日期”当值为null时,就像现在一样。
我应该特别努力消除这个错误吗?
如果是这样,我该如何处理?
有问题的DatePicker
是ControlTemplate
ContentControl
的一部分。这是我正在做的略微提炼的版本:
<ContentControl Content="{Binding Path=MyDateProperty, Mode=TwoWay}">
<ContentControl.Template>
<ControlTemplate TargetType="ContentControl">
<DatePicker DisplayDate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"
SelectedDate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"/>
</ControlTemplate>
</ContentControl.Template>
</ContentControl>
实际上,选择了模板并在代码中设置了绑定,但这会产生我看到的错误。
答案 0 :(得分:0)
您可以按照以下方式解决。我是从Here
获得的internal class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value != null)
return ((DateTime)value).ToShortDateString()
return "Select a date";
}
}
将班级导入XAML-Code
xmlns:converter="clr-namespace:PathToTheFolderWhereTheClassDateConverterIs2
Binding data into XAML
<DatePicker Height="25">
<DatePicker.Text>
<Binding Path="FieldToBind" UpdateSourceTrigger="PropertyChanged">
<Binding.Converter>
<converter:DateConverter>
</Binding.Converter>
</Binding>
</DatePicker>