我需要格式化日期,所以我使用了下面的代码:
<xcdg:Column Title="Registratiedatum" FieldName="RegistratieDatum" Width="1*">
<xcdg:Column.CellContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding StringFormat='{}{0:dd/MM/yyyy HH:mm:ss }', TargetNullValue={x:Static System:String.Empty}}" />
</DataTemplate>
</xcdg:Column.CellContentTemplate>
</xcdg:Column>
然而,一些日期是空的,所以我希望这些字段保持空,但我猜由于格式,它看起来像这样:
01/01/0001就是
任何想法如何限制格式仅为"非空"值?对不起,如果这可能是太基础的问题,但我仍处于学习的初级阶段。
如果Struct
是value type
,它就不可能是null
。
但是,有几种方法可以解决您的问题:
-
在我看来,最干净和最合乎逻辑的是将您的DateTime更改为
Nullable<Datetime>
private DateTime? myDate; public DateTime? MyDate { get { return this.myDate; } set { this.myDate = value; } }
-
如果这不是一个选项,转换器将做的技巧:
。xaml代码:
<UserControl.Resources> <local:DateConverter x:Key="dateConverter"/> </UserControl.Resources> <TextBlock Text="{Binding MyDate, Converter={StaticResource dateConverter}}" />
cs代码
public class DateConverter: IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value != null) { DateTime myDate = (DateTime)value; if (myDate != DateTime.MinValue) { return myDate.ToString("dd/MM/yyyy HH:mm:ss"); } } return String.Empty; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
-
最后,直接在Xaml代码中的DataTrigger允许您在日期为空时隐藏/折叠控件。在转换器中,关键是检查日期是否等于
DateTime.MinValue
。<UserControl x:Class="WpfApplicationTest.MyUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:WpfApplicationTest" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <TextBlock Text="{Binding MyDate, StringFormat='{}{0:dd/MM/yyyy HH:mm:ss }'}" > <TextBlock.Style> <Style TargetType="TextBlock"> <Style.Triggers> <DataTrigger Binding="{Binding MyDate}" Value="{x:Static sys:DateTime.MinValue}"> <Setter Property="Visibility" Value="Collapsed"></Setter> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock>