【问题标题】:WPF datepicker issueWPF日期选择器问题
【发布时间】:2011-01-17 11:31:55
【问题描述】:

Xaml 代码

    <DatePicker Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Margin="100,50,0,10" Name="dateText" VerticalAlignment="Top" Width="120" >
      <DatePicker.SelectedDate>
        <Binding Source="{StaticResource insertTransaction}" Path="Date" />
      </DatePicker.SelectedDate>
    </DatePicker>

上述绑定(insertTransaction) 类中日期属性的代码

private DateTime? date;
    public DateTime? Date 
    {
      get { return this.date; }
      set { this.date = value; }
    }

我怎样才能只检索日期部分而不是整个日期和时间。可空日期是强制性的,因为用户可能第一次不知道日期,以后可能会输入。 DateTime.ToShortDateTime() 在 DateTime 上不起作用?

【问题讨论】:

    标签: c# wpf datepicker


    【解决方案1】:

    不确定您是否在寻找这个:DateTime 有一个属性DateTime.Date。这仅返回 DatePart。但是,您必须先检查空值。

    更新

    根据您的评论,我认为您正在寻找有关可空类型的一些信息。 查看thismsdn-article 以获取有关.net 中可为空类型的更多信息。

    日期时间?是一个可以为空的 DateTime。因此,如果您尝试从其属性中获取值(如果它为空),您将得到空异常。因此,您首先要检查它是否为null,以及访问的属性或方法,例如ToShortDateString()。

    没有专门针对日期的 .net 原生类型。所有日期都在 DateTime 结构中处理并具有时间组件。您可以使用字符串创建自己的类型或句柄(例如 DateTime.GetShortDateString 返回一个字符串)。处理此问题以及可空类型的空值的另一种方法是使用ValueConverter。见here。它们可以从 xaml 中使用,并且可以处理您想要的所有内容。他们非常强大。

    【讨论】:

    • 可以为空的日期时间?没有这个属性。
    • 好吧,我使用的是可为空的 Datetime 类型,因为在这种情况下,当 DateTime 日期为空时,文本框会显示“选择日期”。如果我使用常规 DateTime,它将显示 01/01/0001,直到我设置 DateTime = Datetime.Now() 这对我来说非常重要,我允许用户将日期留空并在其他时间填写。
    【解决方案2】:

    将您的代码更改为:

    public DateTime? Date {
        get { return this.date.Value.Date; }
        set { this.date = value; }
    }
    

    您还将获得被忽略的时间和虚拟时间(例如 12:00 AM)

    如果你想要准确的没有时间的日期,你必须在get 中接受它作为字符串ToShortDateTime();

    【讨论】:

    • 如果还带时间字符串,这个有什么用。而且那也毫无价值....现在是 21/12/2010 00:00:00 ... 这就是全部区别
    【解决方案3】:

    不清楚您要在代码或 xaml 中的何处检索日期部分。无论如何,在代码中你可以这样做:

    if (Date.HasValue == true)
    {
        return Date.Value.ToShortDateString();
    }
    

    【讨论】:

    • 我不确定您的建议。那么无论如何 ToShortDateTime 在 DateTime 上不起作用?
    【解决方案4】:

    谢谢大家!! 我想我是向南而不是向北 :-P .... 那么现在我要使用 Nullable DateTime 了吗?它应该被使用的方式。我将使用 StringFormat,而不是试图寻找提取日期的不当解决方案;每当我需要显示日期时。

    我想这是最佳解决方案。如果你们有其他想法,请告诉我。

    再次感谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多