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)
有关如何解决这个问题的想法,并在控件中显示日期并绑定两种方式?
问题是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)