WPF DatePicker - 编写自定义日期时间格式

时间:2016-10-18 10:33:30

标签: wpf datepicker

我在我的应用程序DatePicker中。我想写标准的DateTime格式(例如2016-10-18),从日历中选择DateTime或编写自定义格式(例如ddmmrrrr,ddmm,ddmmrr ...) 我做了DateTimeConverter:

class DateTimeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DateTime emptyDateTime;
        if (DateTime.TryParse(value.ToString(), out emptyDateTime) && emptyDateTime == DateTime.MinValue)
            return DateTime.Now;
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int valueNumber;
        string valueStr = value.ToString().Replace(".", "");
        if (!int.TryParse(valueStr, NumberStyles.Integer, CultureInfo.InvariantCulture, out valueNumber))
            return DateTime.Now;
        if (valueStr.Length == 8) //format ddmmrrrr
        {
            DateTime emptyDateTime;
            //for removing empty datetime (01.01.0001)
            return DateTime.TryParse(value.ToString(), out emptyDateTime) && emptyDateTime == DateTime.MinValue
                ? (object) null
                : new DateTime(valueNumber%10000, (valueNumber/10000)%100, valueNumber/1000000);
        }
        if (valueStr.Length == 6) //format ddmmrr
            return new DateTime(2000 + valueNumber % 100, (valueNumber / 100) % 100, valueNumber / 10000);
        if (valueStr.Length == 4) //format ddmm
            return new DateTime(DateTime.Now.Year, valueNumber % 100, valueNumber / 100);
        return DateTime.Now;
    }
}

这是我的DatePicker:

<DatePicker Focusable="True" Grid.Column="4"
                            Text="{Binding Order.DateTime, Mode=TwoWay, Converter={StaticResource DateTimeConverter}}" 
                            PreviewKeyDown="DatePicker_OnPreviewKeyDown"/>

这是绑定的属性:

class Order{
  public DateTime DateTime { get; set; }
}

我的问题是: 当DatePicker为null时,Order.DateTime中的值为01.01.0001 当我写我的格式(ddmmrrrr)时,Order.DateTime中的值是DateTime.Now

我看不出什么错。感谢

1 个答案:

答案 0 :(得分:1)

您的Converter检查TryParse错误。将其更改为:

 if (!DateTime.TryParse(value.ToString(), out emptyDateTime) || emptyDateTime == DateTime.MinValue)
        return DateTime.Now;

 return value;