3

我有一个名为 Raised_Time 的属性,该属性显示数据网格单元格中发出警报的时间。当用户创建任何警报时,我不想在 datagrid 单元格中显示任何内容,它只显示空单元格。

我在互联网上搜索,发现可以使用 DateTime.MinValue 设置 DateTime 的默认值,这将显示日期时间的 MinValue,即“1/1/0001 12:00:00 AM”。

相反,我希望数据网格单元格保持空白,直到发出警报,它不会显示任何时间。

我认为在这种情况下可以编写 datatrigger 。我无法为这种情况编写数据触发器。我是否还需要一个转换器来检查 DateTime 是否设置为 DateTime.MinValue 是否将数据网格单元格留空?

请帮忙!!

4

4 回答 4

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();
    }
}
于 2010-09-07T12:22:22.387 回答
7

我看到两个简单的选择来解决这个问题:

  1. 您使用 Nullable 数据类型DateTime?,以便您可以存储null而不是在DateTime.MinValue未设置警报时间的情况下进行存储。

  2. 您可以使用转换器,这是一个示例

于 2010-09-07T12:21:07.450 回答
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);
  }
}
于 2010-09-07T12:18:26.427 回答
2

nullable datetime为此使用了一个扩展方法,例如:

 public static string ToStringOrEmpty(this DateTime? dt, string format)
 {
     if (dt == null)
        return string.Empty;

     return dt.Value.ToString(format);
 }
于 2010-09-07T12:13:13.627 回答