在 WPF 应用程序中绑定可为 null 的日期时间
Binding a nullable datetime within WPF application
我有一个 wpf 应用程序,其中我有这个 属性 绑定到 datepicker
public Nullable<System.DateTime> dpc_date_engagement { get; set; }
所以我添加了一个转换器:
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
return ((DateTime)value).ToShortDateString();
return String.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string strValue = value.ToString();
DateTime resultDateTime;
return DateTime.TryParse(strValue, out resultDateTime) ? resultDateTime : value;
}
}
在 XAML 文件中:
<DatePicker >
<DatePicker.Text>
<Binding Path="dpc_date_engagement" UpdateSourceTrigger="PropertyChanged">
<Binding.Converter>
<converter:DateConverter/>
</Binding.Converter>
</Binding>
</DatePicker.Text>
</DatePicker>
问题是当日期为空时,显示的文本是 1/1/0001。
- 如何修复我的代码以显示空字符串而不是 01/01/0001,对于空值?
传递给转换器的 Nullable value
本身不是 null
,即使它包含 null
值(它甚至不能为 null,因为它是一个结构因此不可为空)。
因此,您不必将 value
与 null
进行比较,而是必须将其转换为 Nullable<Datetime>
,然后检查其 HasValue
属性。
此外,您的绑定 属性 中似乎有类似 DateTime.MinValue
的内容,而不是 null
。所以你也应该检查一下:
public object Convert(...)
{
var nullable = (Nullable<DateTime>)value;
if (nullable.HasValue && nullable.Value > DateTime.MinValue)
{
return nullable.Value.ToShortDateString();
}
return String.Empty;
}
我发现在 DatePicker[=19] 中处理 nullable DateTime 字段的最简单方法=] 正在设置 TargetNullValue=''
在 XAML 文件中:
<DatePicker Text={Binding dpc_date_engagement, Mode=TwoWay, TargetNullValue='', UpdateSourceTrigger=PropertyChanged} />
我有一个 wpf 应用程序,其中我有这个 属性 绑定到 datepicker
public Nullable<System.DateTime> dpc_date_engagement { get; set; }
所以我添加了一个转换器:
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
return ((DateTime)value).ToShortDateString();
return String.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string strValue = value.ToString();
DateTime resultDateTime;
return DateTime.TryParse(strValue, out resultDateTime) ? resultDateTime : value;
}
}
在 XAML 文件中:
<DatePicker >
<DatePicker.Text>
<Binding Path="dpc_date_engagement" UpdateSourceTrigger="PropertyChanged">
<Binding.Converter>
<converter:DateConverter/>
</Binding.Converter>
</Binding>
</DatePicker.Text>
</DatePicker>
问题是当日期为空时,显示的文本是 1/1/0001。
- 如何修复我的代码以显示空字符串而不是 01/01/0001,对于空值?
传递给转换器的 Nullable value
本身不是 null
,即使它包含 null
值(它甚至不能为 null,因为它是一个结构因此不可为空)。
因此,您不必将 value
与 null
进行比较,而是必须将其转换为 Nullable<Datetime>
,然后检查其 HasValue
属性。
此外,您的绑定 属性 中似乎有类似 DateTime.MinValue
的内容,而不是 null
。所以你也应该检查一下:
public object Convert(...)
{
var nullable = (Nullable<DateTime>)value;
if (nullable.HasValue && nullable.Value > DateTime.MinValue)
{
return nullable.Value.ToShortDateString();
}
return String.Empty;
}
我发现在 DatePicker[=19] 中处理 nullable DateTime 字段的最简单方法=] 正在设置 TargetNullValue=''
在 XAML 文件中:
<DatePicker Text={Binding dpc_date_engagement, Mode=TwoWay, TargetNullValue='', UpdateSourceTrigger=PropertyChanged} />