gpt4 book ai didi

c# - CalendarDatePicker 绑定(bind)空值

转载 作者:行者123 更新时间:2023-11-30 15:20:37 24 4
gpt4 key购买 nike

我正在使用 CalendarDatePicker

<CalendarDatePicker x:Name="DatePick" DisplayMode="Decade" Date="{Binding DisplayValue, Mode=TwoWay}"/>

问题是当我绑定(bind)日期属性时,选择器不再显示默认的占位符文本(选择一个日期),而是现在如果属性为 null(属性始终设置为 null)则显示 01.01.1916。

public DateTimeOffset? DisplayValue {get;set;}

如果我手动将 null 作为 Date 的值,它现在会再次显示 PlaceholderText。

DatePick.Date=null;

并且绑定(bind)仍然有效/我在选择日期时得到了所需的值。那么是否可以在不使用代码隐藏的情况下显示占位符文本?

最佳答案

似乎日历日期选择器的“最小值”总是当前年份减去 100,我已将您的代码修改为:

  public class CalendarDatePickerEx : CalendarDatePicker
{
public DateTimeOffset? DefaultValue { get; set; }

public static readonly DependencyProperty DefaultValueProperty =
DependencyProperty.Register("DefaultValue", typeof(DateTimeOffset), typeof(CalendarDatePickerEx), new PropertyMetadata(null, (sender, e) =>
{
if ((DateTimeOffset?)e.NewValue != null && ((CalendarDatePickerEx)sender).Date.Value.Date.Year == DateTime.Today.Year - 100)
{
((CalendarDatePickerEx)sender).SetDisplayDate((DateTimeOffset)e.NewValue);
((CalendarDatePickerEx)sender).Date = null;
}
else if ((DateTimeOffset?)e.NewValue == null && ((CalendarDatePickerEx)sender).Date.Value.Date.Year == DateTime.Today.Year - 100)
{
{
((CalendarDatePickerEx)sender).SetDisplayDate(DateTimeOffset.Now);
((CalendarDatePickerEx)sender).Date = null;
}
}
}));
}

首选方案

如果您使用 x:Bind 而不是 Binding,则一切都按预期工作,并且如果绑定(bind)日期值为 null,您可以看到占位符。

直接在 XAML 页面中:

<CalendarDatePicker Date="{x:Bind DataContext.DisplayValue, Mode=TwoWay}"/>

或在 DataTemplate 中:

<DataTemplate x:Key="DateFieldItemTemplate"
x:DataType="DataModel:ObjectTypeWithDate">
<Grid>
<CalendarDatePicker Date="{x:Bind DateField, Mode=TwoWay}"/>
</Grid>
</DataTemplate>

关于c# - CalendarDatePicker 绑定(bind)空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39775527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com