如果 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;
}
}
}
但默认设置为今天。
我可以设置什么值来清除日期?
从我们之前的讨论来看,我想你想根据从服务器获得的值来设置 CalendarDatePicker
的 Date
,但是首先设置这个值默认为“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;
}
}
但要注意Date
受MinDate
和MaxDate
约束,如果Date
小于MinDate
,则该值设置为MinDate
。如果 Date
大于 MaxDate
,则该值设置为 MaxDate
。因此,如果您在此处设置日期,例如“0010-01-02”,并且您的 MinDate
设置为“2000-01-01”,那么 return 这个日期在您的 Converter
,CalendarDatePicker
将显示“01/01/2000”。
关于这个控件的更多信息,可以参考CalendarDatePicker class。
我有一个 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;
}
}
}
但默认设置为今天。 我可以设置什么值来清除日期?
从我们之前的讨论来看,我想你想根据从服务器获得的值来设置 CalendarDatePicker
的 Date
,但是首先设置这个值默认为“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;
}
}
但要注意Date
受MinDate
和MaxDate
约束,如果Date
小于MinDate
,则该值设置为MinDate
。如果 Date
大于 MaxDate
,则该值设置为 MaxDate
。因此,如果您在此处设置日期,例如“0010-01-02”,并且您的 MinDate
设置为“2000-01-01”,那么 return 这个日期在您的 Converter
,CalendarDatePicker
将显示“01/01/2000”。
关于这个控件的更多信息,可以参考CalendarDatePicker class。