【问题标题】:datetime converter WPF日期时间转换器 WPF
【发布时间】:2013-09-05 14:07:36
【问题描述】:

我有这个转换器,一旦从 DataPicker 中选择日期,我就可以得到当前时间。在字符串日期中,我得到了从 DatePicker 中选择的值,但我似乎不能只得到日期。进入 Value 属性的格式是 9/24/2013 12:00:00 我希望它是 9/24/2013

我得到的错误是“错误 122 方法 'ToString' 没有重载需要 1 个参数”

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
            if (value is DateTime)
            {
            string date = value.ToString("d/M/yyyy");
            return (date);
            }

             return string.Empty;
}

【问题讨论】:

标签: c# wpf wpf-controls


【解决方案1】:

您需要先将其转换为 DateTime:

public object Convert(object value, Type targetType, object parameter,
                      System.Globalization.CultureInfo culture)
{
    if (value is DateTime)
    {
        DateTime test = (DateTime) value;
        string date = test.ToString("d/M/yyyy");
        return date;
    }

    return string.Empty;
}

【讨论】:

  • 但 if 条件只有在 DateTime 的情况下才会满足 为什么要进行类型转换?
  • @NithinNayagam 可以是派生自DateTime的对象类型。
  • 当我尝试这个时,我得到“指定的演员表无效”
【解决方案2】:

您应该将 value 转换为 DateTime 类型,因为 Object 的类型没有 ToString(String f) 方法。

if (value is DateTime)
{
   var dateTime = (DateTime)value;
   return dateTime.ToString("dd/MM/yyyy");
}

return string.Empty;

【讨论】:

  • 这不会编译,因为 DateTime 是一个值类型,不能用 as 关键字强制转换。
【解决方案3】:

检查值的类型后,您需要将其转换为适当的类型,以便能够使用格式参数执行“ToString”调用。试试:

if (value is DateTime)
{
    var dateValue = value as DateTime;
    string date = dateValue.ToString("dd/MM/yyyy");
    return date; 
}

【讨论】:

  • 您不应该使用is 运算符。因为它会非常缓慢。在您的情况下,它相当于两次强制转换。
  • 实际上是的,但我写的答案适合作者的转换功能。此外,编写接受“对象”作为参数并返回对象的函数也不是一个好习惯。
【解决方案4】:

如果您在 WPF DatePicker 控件上使用转换器,则应注意 WPF DatePicker 自身将重新格式化日期尽管您使用了转换器。你必须style the Datepicker to include a StringFormat

这里有一个相关的问题:如何show just Month Year string format in a DatePicker 显示一个附加属性来修改 DatePicker 的行为以显示自定义格式。这是必需的,因为 WPF Datepicker 控件本身存在缺陷。

还要注意有一些注意事项,特别是 DatePicker 会在其默认字符串格式和您应用的字符串格式之间闪烁!我在上面的问题a workaround for to apply a custom Format to WPF Datepicker 中回答了,没有闪烁。

希望您能找到您正在寻找的解决方案。

【讨论】:

    【解决方案5】:
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is DateTime)
        {
            string date=value.Date.ToShortDateString();
            return (date);
        }
    
        return string.Empty;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2010-10-12
      相关资源
      最近更新 更多