我们可以将Nullable <DateTime>用作XAML中的DependencyProperty用于Metro风格的应用程序

Kri*_*hna 3 c# xaml microsoft-metro windows-8 winrt-xaml

我正在尝试将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'; target元素是'MyProject.Controls.DatePicker'(Name ='null'); target属性为'SelectedValue'(类型'DateTime>').

依赖属性定义如下:

public static readonly DependencyProperty SelectedValueProperty =
    DependencyProperty.Register("SelectedValue", 
                                typeof (System.Nullable<System.DateTime>),
                                typeof(DatePicker),
                                PropertyMetadata.Create(default(DateTime?)));
Run Code Online (Sandbox Code Playgroud)

在XAML页面中,它用作:

<local:DatePicker  
   Margin="0,10" 
   SelectedValue="{Binding Model.Date, Mode=TwoWay}" 
   FontSize="21.333"/>
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*don 6

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

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

DateTime dateTime = nullDateTime ?? new DateTime(0, 0, 0, 0, 0, 0); 
Run Code Online (Sandbox Code Playgroud)