编程语言
首页 > 编程语言> > c#-CalendarDatePicker绑定空值

c#-CalendarDatePicker绑定空值

作者:互联网

我正在使用CalendarDatePicker

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

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

public DateTimeOffset? DisplayValue {get;set;}

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

DatePick.Date=null;

并且绑定仍然有效/在选择日期时仍可以获取所需的值.
那么有可能在不使用代码隐藏的情况下显示占位符文本吗?

解决方法:

似乎calendardatepicker的“最小值”始终是当前年份减去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,则所有功能均按预期工作,并且如果绑定的日期值为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>

标签:uwp,model-binding,asp-net,xaml,c
来源: https://codeday.me/bug/20191026/1938112.html