Oli*_*ias 6 c# asp.net xaml model-binding uwp
I\xc2\xb4m 使用 CalendarDatePicker
\n\n<CalendarDatePicker x:Name="DatePick" DisplayMode="Decade" Date="{Binding DisplayValue, Mode=TwoWay}"/>\nRun Code Online (Sandbox Code Playgroud)\n\n问题是当我绑定日期属性时,选择器不再显示默认占位符文本(选择日期),而是如果属性为 null(属性始终设置为 null),则现在显示 01.01.1916。
\n\npublic DateTimeOffset? DisplayValue {get;set;}\nRun Code Online (Sandbox Code Playgroud)\n\n如果我手动将 null 作为 Date 的值,它现在会再次显示 PlaceholderText。
\n\nDatePick.Date=null;\nRun Code Online (Sandbox Code Playgroud)\n\n并且绑定仍然有效/我在选择日期时得到了所需的值。\n那么是否有可能在不使用隐藏代码的情况下显示占位符文本?
\n似乎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;
}
}
}));
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 x:Bind 而不是 Binding,则一切都会按预期工作,并且如果绑定日期值为 null,您可以看到占位符。
直接在XAML页面中:
<CalendarDatePicker Date="{x:Bind DataContext.DisplayValue, Mode=TwoWay}"/>
Run Code Online (Sandbox Code Playgroud)
或在 DataTemplate 内:
<DataTemplate x:Key="DateFieldItemTemplate"
x:DataType="DataModel:ObjectTypeWithDate">
<Grid>
<CalendarDatePicker Date="{x:Bind DateField, Mode=TwoWay}"/>
</Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1963 次 |
| 最近记录: |