如果 UWP 中出现某些情况,如何清除绑定到 CalendarDatePicker 的日期?

How to clear the date bound to a CalendarDatePicker if certain conditions occur in UWP?

我有一个 CalendarDatePicker,其日期 属性 绑定到转换器。 如果日期是默认日期 (01-01-0001),我不希望它显示日期

我的代码

class DateTimeToCalendarDateTimeOffsetConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        try
        {
            DateTime date = (DateTime)value;
            return new DateTimeOffset(date);
        }
        catch (Exception ex)
        {
            return null;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        try
        {
            DateTimeOffset dto = (DateTimeOffset)value;
            return dto.DateTime;
        }
        catch (Exception ex)
        {
            return DateTime.MinValue;
        }
    }
}       

但默认设置为今天。 我可以设置什么值来清除日期?

从我们之前的讨论来看,我想你想根据从服务器获得的值来设置 CalendarDatePickerDate,但是首先设置这个值默认为“0001-01-01”。

所以你可以这样做:

<Page.Resources>
    <local:DateTimeToCalendarDateTimeOffsetConverter x:Key="cvt" />
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <CalendarDatePicker x:Name="picker" Date="{x:Bind Path=dateTime,Converter={StaticResource cvt}, Mode=TwoWay}" />
</Grid>

隐藏代码:

private DateTime dateTime;

public MainPage()
{
    this.InitializeComponent();
    dateTime = new DateTime(0001, 01, 01);
}

这个变量dateTime是我伪造的,在后面的代码中设置的,转换器是这样的:

public class DateTimeToCalendarDateTimeOffsetConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        var date = (DateTime)value;
        if (date == new DateTime(0001, 01, 01))
        {
            return null;
        }
        return new DateTimeOffset?(date);
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        var dto = (DateTimeOffset)value;
        return dto.DateTime;
    }
}

但要注意DateMinDateMaxDate约束,如果Date小于MinDate,则该值设置为MinDate。如果 Date 大于 MaxDate,则该值设置为 MaxDate。因此,如果您在此处设置日期,例如“0010-01-02”,并且您的 MinDate 设置为“2000-01-01”,那么 return 这个日期在您的 ConverterCalendarDatePicker 将显示“01/01/2000”。

关于这个控件的更多信息,可以参考CalendarDatePicker class