c# - UWP:ListView:CalendarDatePicker 中的默认视图
问题描述
在 Windows 10 build 18362 下的 UWP 应用程序中,我有一个包含 CalendarDatePicker 的 ListView。此控件字段中显示的值以文本格式存储在 SQLite 数据库中。阅读此文本字段(格式 yyyyMMdd)后,我使用转换器将其转换为 DateTimeOffset 格式,它工作正常。当日期字段为空时(用户在保存数据之前没有在 CalendarDatePicker 中选择日期),就会出现我的问题。然后,在页面打开时,CalendarDatePicker 始终显示默认日期,即 01/01/1919,而它应该为我提供定义的 PlaceholderText。以下是页面的 XAML 代码和转换器背后的代码的摘录。欢迎任何帮助。谢谢你。
<ListView x:Name="listVProjets"
Margin="0,140,0,40"
IsItemClickEnabled="True"
ItemClick="ListVProjets_ItemClick"
SelectionChanged="ListVProjets_SelectionChanged"
>
<ListView.ItemTemplate>
<DataTemplate x:DataType="local1:Projets">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40" />
<ColumnDefinition Width="40" />
<ColumnDefinition Width="240" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="110" />
<ColumnDefinition Width="110" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0"
x:Name="btnOpenSProj"
Content="--"
Tag="{Binding}"
Click="BtnOpenSProj_Click"/>
<CheckBox Grid.Column="1"
x:Name="chkBoxProj"
Margin="15,0,0,0"
Tag="{Binding}"
Click="ChkBoxProj_Click"
IsChecked="{Binding IsChk, Converter={StaticResource NullableBooleanToBooleanConverter}, Mode=OneWay}"/>
<TextBox Grid.Column="2"
x:Name="nomProjTxt"
Margin="20,0,0,0"
TextWrapping="NoWrap"
BorderBrush="Transparent"
Text="{Binding NomProj, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
FontSize="16"
Foreground="Black"
PlaceholderText="Nom du projet"
SelectionChanged="NomProjTxt_SelectionChanged"/>
<CalendarDatePicker Grid.Column="3"
Name="dateprojPTxt"
Margin="20,0,0,0"
BorderBrush="Transparent"
FontSize="16"
Foreground="Black"
IsTodayHighlighted="True"
DateChanged="DateprojPTxt_DateChanged"
Tag="{Binding}"
Date="{x:Bind DateProjPrevu, Converter={StaticResource StringToDateTimeOffsetConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DateFormat="{}{day.integer(2)}/{month.integer(2)}/{year.full}"
/>
public class StringToDateTimeOffsetConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
DateTimeOffset dt;
if (value != null && value is string)
{
var stringToConvert = value as string;
if (!DateTimeOffset.TryParse(stringToConvert, out dt))
{
return null;
}
}
return dt;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
string time;
if (value != null && value is DateTimeOffset)
{
var valueToConvert = (DateTimeOffset)value;
time = new DateTime(valueToConvert.Ticks).ToString("yyyyMMdd");
}
else
{
time = null;
}
return time;
}
}
解决方案
当您的日期字段为空时,您将从转换器返回 DateTimeOffset dt。dt 具有默认值,因此您的 CalendarDatePicker 始终显示默认数据。因此,当您的日期字段为 null 时,您应该从转换器返回 null ,如下所示。
public object Convert(object value, Type targetType, object parameter, string language)
{
DateTimeOffset dt;
if (value != null && value is string)
{
var stringToConvert = value as string;
if (!DateTimeOffset.TryParse(stringToConvert, out dt))
{
return null;
}
}
else if (value == null) {
return null;
}
return dt;
}
推荐阅读
- java - 设置sourceOffset,唯一键,日志压缩后Kafka Connect在主题中复制消息
- php - 如何用 Radio Stream 脚本的访问者 IP 替换服务器的位置?
- c# - 在“asp.net core web api with react”spa模板中保存上传的图像并将图像提供给客户端的位置?
- c# - 如何在 Unity 中找出实例化预制件的子对象的数量?
- reactjs - 将 type: 'dark' 应用到 MUI 调色板会破坏我的网站,除非它直接在 createMuiTheme() 函数中定义
- c# - 如何在 C# 中将字符串拆分为两个单独的变量
- c++ - system() 不适用于修改命令行提示符
- visual-studio-code - 如何修复 JSX 元素“html”在测试文件的 Visual Studio Code 中没有相应的结束标记
- c++ - 外部整数未正确传递给 std::thread 中的 lambda 表达式
- sql - 关于 UAC 或 Elevation 使用频率的 SQL 查询?