3

我正在尝试将DateTime?属性用作 DependencyProperty,以便可以在 Metro 风格应用程序的 XAML 中将其绑定。

但是,当应用程序运行时(在调试模式下),我收​​到一个绑定错误,并且日期没有显示在我的控件中:

错误:转换器无法将类型 'System.DateTime、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089' 的值转换为类型 'DateTime>';BindingExpression:路径='Model.Date' DataItem='MyProject.Common.ViewModel.TransactionViewModel,MyProject,版本=1.0.0.0,Culture=neutral,PublicKeyToken=null';目标元素是 'MyProject.Controls.DatePicker' (Name='null'); 目标属性是“SelectedValue”(类型“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"/>

关于如何解决这个问题并在控件中显示日期并绑定两种方式的任何想法?

4

1 回答 1

6

问题是 DatePicker 期望DateTime类型不是DateTime?Nullable 的语法糖。没有从DateTime?to的隐式转换DateTime。编写您自己的IValueConverter。你可以退后一步,问一个问题:你需要 DateTime 吗?您能否将不存在的日期表示为 00/00/00?

另一种选择是在绑定之前转换它,例如

DateTime dateTime = nullDateTime ?? new DateTime(0, 0, 0, 0, 0, 0); 
于 2012-06-11T10:20:51.343 回答