【问题标题】:Can we using Nullable<DateTime> as a DependencyProperty in XAML for Metro-style apps我们可以在 XAML 中使用 Nullable<DateTime> 作为 Metro 风格应用程序的 DependencyProperty
【发布时间】:2012-06-14 05:26:26
【问题描述】:

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

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

错误:转换器无法转换“System.DateTime”类型的值, mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089' 输入 'DateTime>'; BindingExpression:路径='Model.Date' DataItem='MyProject.Common.ViewModel.TransactionViewModel, MyProject, 版本=1.0.0.0,文化=中性,PublicKeyToken=null';目标元素 是'MyProject.Controls.DatePicker'(名称='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"/>

关于如何解决此问题并获取控件中显示的日期并双向绑定的任何想法?

【问题讨论】:

    标签: c# xaml windows-8 microsoft-metro winrt-xaml


    【解决方案1】:

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

    另一种选择是在绑定之前对其进行转换,例如

    DateTime dateTime = nullDateTime ?? new DateTime(0, 0, 0, 0, 0, 0); 
    

    【讨论】:

    • 酷 - 工作:)。我现在使用的是 DateTime 而不是 DateTime?以及控制和绑定工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多