我有一个名为Raised_Time的属性,此属性显示在datagrid Cell中引发警报的时间。当用户创建任何警报时,我不想在datagrid单元格中显示任何内容,它只显示空单元格。
我在互联网上搜索,发现可以使用DateTime.MinValue设置DateTime的默认值,这将显示datetime i的MinValue:e“1/1/0001 12:00:00 AM”。
相反,我希望datagrid单元格保持空白,直到出现警报,它不会显示任何时间。
我认为在这种情况下可以编写datatrigger。我无法为此方案编写数据触发器。我是否还需要一个转换器来检查DateTime是否设置为DateTime.MinValue将datagrid单元格留空?
请帮助!!
答案 0 :(得分:9)
我会使用转换器,因为这是我将来很容易看到重用的东西。这是我以前使用的一个将DateFormat的字符串值作为ConverterParameter。
public class DateTimeFormatConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if ((DateTime)value == DateTime.MinValue)
return string.Empty;
else
return ((DateTime)value).ToString((string)parameter);
}
public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException();
}
}
答案 1 :(得分:7)
我看到两个简单的选择来解决这个问题:
您使用Nullable数据类型DateTime?
,以便在未设置闹钟时间时存储null
而不是DateTime.MinValue
。
您可以使用转换器here is an example。
答案 2 :(得分:3)
如何只更改属性以链接到DateTime的私有字段,例如:
public string Raised_Time
{
get
{
if(fieldRaisedTime == DateTime.MinValue)
{
return string.Empty();
}
return DateTime.ToString();
}
set
{
fieldRaisedTime = DateTime.Parse(value, System.Globalization.CultureInfo.InvariantCulture);
}
}
答案 3 :(得分:2)
我为此使用nullable datetime
,其扩展方法如下:
public static string ToStringOrEmpty(this DateTime? dt, string format)
{
if (dt == null)
return string.Empty;
return dt.Value.ToString(format);
}