我们可以在Metro风格应用的XAML中使用Nullable<DateTime>作为DependencyProperty吗?

3
我试图将一个DateTime?属性作为DependencyProperty使用,这样我就可以在Metro风格应用的XAML中绑定它。
然而,当应用程序运行时(在调试模式下),我会得到一个绑定错误,并且日期不会显示在我的控件中:
错误: 转换器无法将类型为'System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'的值转换为类型'DateTime>'; BindingExpression: Path='Model.Date' DataItem='MyProject.Common.ViewModel.TransactionViewModel, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'; 目标元素是'MyProject.Controls.DatePicker' (Name='null'); 目标属性是'SelectedValue' (type 'DateTime>')。
依赖属性的定义如下:
public static readonly DependencyProperty SelectedValueProperty =
    DependencyProperty.Register("SelectedValue", 
                                typeof (System.Nullable<System.DateTime>),
                                typeof(DatePicker),
                                PropertyMetadata.Create(default(DateTime?)));

在XAML页面中,它被用作:
<local:DatePicker  
   Margin="0,10" 
   SelectedValue="{Binding Model.Date, Mode=TwoWay}" 
   FontSize="21.333"/>

有什么办法可以修复这个问题,并使日期在控件中显示并进行双向绑定吗?
1个回答

6
问题在于DatePicker期望DateTime类型而不是DateTime?,后者是Nullable的语法糖。从DateTime?DateTime没有隐式转换。请自己编写IValueConverter。您可以回退一步并问自己一个问题:您是否需要DateTime?您能否将不存在的日期表示为00/00/00?
另一个选项是在绑定之前进行转换。
DateTime dateTime = nullDateTime ?? new DateTime(0, 0, 0, 0, 0, 0); 

太棒了 - 它起作用了 :). 我现在使用 DateTime 而不是 DateTime?,控件和绑定也可以工作了。 - Krishna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接