Lam*_*fif 2 .net c# wpf binding datetime
我有一个wpf应用程序,我将此属性绑定到一个datepicker
public Nullable<System.DateTime> dpc_date_engagement { get; set; }
Run Code Online (Sandbox Code Playgroud)
所以我添加了一个转换器:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在XAML文件中:
<DatePicker >
<DatePicker.Text>
<Binding Path="dpc_date_engagement" UpdateSourceTrigger="PropertyChanged">
<Binding.Converter>
<converter:DateConverter/>
</Binding.Converter>
</Binding>
</DatePicker.Text>
</DatePicker>
Run Code Online (Sandbox Code Playgroud)
问题是当日期为空时,显示的文本为1/1/0001.
小智 8
我发现在DatePicker 中使用处理可 为空的DateTime字段的最简单方法是设置TargetNullValue=''
在 XAML 文件中:
<DatePicker Text={Binding dpc_date_engagement, Mode=TwoWay, TargetNullValue='', UpdateSourceTrigger=PropertyChanged} />
Run Code Online (Sandbox Code Playgroud)
value传递给你的转换器的Nullable 本身不是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;
}
Run Code Online (Sandbox Code Playgroud)