“;日期时间";以及“;DateTime”;.(试图从日期选择器中获取值)

本文关键字:日期 选择器 获取 时间 quot 以及 DateTime | 更新日期: 2023-09-27 18:12:28

我对WPFC#还很陌生,所以不要责怪我问了这个可能很愚蠢的问题。

我的WPF应用程序有两个日期选择器。我想在DateTime发生变化时从中获取它,并将其用作应用程序中其他内容的变量。所以我为它们中的每一个都有这样的东西(方法是由VS自动生成的(:

private void datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
        {
            date1 = datePicker1.SelectedDate;
        }

但问题是日期选择器中的日期是格式DateTime不是DateTime,我真的不知道那里的问号是什么意思,为什么会出现。我尝试了一些研究,但没有找到任何对我有帮助的东西。如果你能从约会选择者那里找到更好的约会方式,你也可以帮我。我只需要在我的xaml.cs代码中使用它,而不是在xaml中,而且我并不真正喜欢使用绑定,因为我不确定它在这种情况下是否按我的需要工作。

谢谢你的回答。

编辑:我想添加它显示此错误的信息:

无法隐式转换类型"System"。日期时间?'到’系统。DateTime'。存在显式转换(是否缺少铸造?(

“;日期时间";以及“;DateTime”;.(试图从日期选择器中获取值)

?的DateTime是可为null的DateTime,它可以保存null值。对于你的情况,你可以做:

private void datePicker1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
    if(datePicker1.SelectedDate.HasValue)
         date1 = datePicker1.SelectedDate.Value;
}

Nullable<T> C#

在C#和Visual Basic中,可以使用?值类型后的符号。例如,int?在C#或Integer中?在Visual Basic中声明了一个可以赋值的整数值类型无效的

可为null的DateTime可以为null。

DateTime结构本身不提供null选项。但是DateTime?可为null的类型允许您将null文本分配给DateTime类型。它在对象模型中提供了另一个级别的间接性。

使用null DateTime结构的程序:C#

using System;
class Program
{
    static void Main()
    {
    //
    // Declare a nullable DateTime instance and assign to null.
    // ... Change the DateTime and use the Test method (below).
    //
    DateTime? value = null;
    Test(value);
    value = DateTime.Now;
    Test(value);
    value = DateTime.Now.AddDays(1);
    Test(value);
    //
    // You can use the GetValueOrDefault method on nulls.
    //
    value = null;
    Console.WriteLine(value.GetValueOrDefault());
    }
    static void Test(DateTime? value)
    {
    //
    // This method uses the HasValue property.
    // ... If there is no value, the number zero is written.
    //
    if (value.HasValue)
    {
        Console.WriteLine(value.Value);
    }
    else
    {
        Console.WriteLine(0);
    }
    }
}

输出

0
9/29/2009 9:56:21 AM
9/30/2009 9:56:21 AM
1/1/0001 12:00:00 AM

最初在这里找到

祝你好运!

您不能创建没有任何值(即null(的DateTime。它将始终具有默认值(DateTime.MinValue(。

另一方面,DateTime?是一种围绕DateTime的包装器,它允许您保持其未定义。这可能非常有用,例如,如果您想让用户将其中一个日期字段留空(未选择日期=Null(。

请记住,您需要使用DateTime?作为任何需要进行相关工作的方法的参数类型。如果您依赖其他库,或者必须将这些数据传递给其他组件等,那么有时您可能会面临尴尬的情况。

典型挑战/决策:
">我在组件X中使用DateTime?,它与使用DateTime的组件Y对话-我应该重写Y中抛出一个异常">

只是在使用DateTime?时需要注意和思考的事项。。

可为null的DateTime可以为null。DateTime结构本身不提供null选项。但是"DateTime?"可为null的类型允许您将null文本分配给DateTime类型。它提供了另一个级别的间接性。

//Created Date without empty or nullable
public DateTime CreatedDate { get; set; }
//with Nullable or empty
public DateTime? UpdatedDate { get; set; }
public DateTime? DeletedDate { get; set; }

结果视图:单击此处