【问题标题】:Creating custom GroupDescription based on DateTime基于 DateTime 创建自定义 GroupDescription
【发布时间】:2011-09-19 09:44:32
【问题描述】:

我正在对一些数据进行分组,而 PropertyGroupDescription 大部分时间都可以正常工作。但是,如果该属性是 DateTime 并且我不想将多个日期组合为一个组(例如每个组中的 30 天或其他内容),我将需要一个新的 GroupDescription。问题是我不知道这个类实际上是如何工作的以及我将如何设计这样一个类。

我希望能够继承 PropertyGroupDescription(而不是基本的抽象类),因为这也将基于一个属性,但在这里我是基于一系列值而不是单个值 == 1组。

任何指南,甚至是这样的现成课程?

【问题讨论】:

  • 刚刚注意到 PropertyGroupDescription 有一个 IValueConverter 参数可以用于这样的事情。

标签: wpf datetime grouping groupstyle


【解决方案1】:

有点晚了,但正如你所说的那样,IValueConverter 可以用于此 - 这是我曾经使用过的一个简单转换器,它将按友好的相对日期字符串分组:

public class RelativeDateValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var v = value as DateTime?;
        if(v == null) {
            return value;
        }

        return Convert(v.Value);
    }

    public static string Convert(DateTime v)
    {
        var d = v.Date;
        var today = DateTime.Today;
        var diff = today - d;
        if(diff.Days == 0) {
            return "Today";
        }

        if(diff.Days == 1) {
            return "Yesterday";
        }

        if(diff.Days < 7) {
            return d.DayOfWeek.ToString();
        }

        if(diff.Days < 14) {
            return "Last week";
        }

        if(d.Year == today.Year && d.Month == today.Month) {
            return "This month";
        }

        var lastMonth = today.AddMonths(-1);
        if(d.Year == lastMonth.Year && d.Month == lastMonth.Month) {
            return "Last month";
        }

        if(d.Year == today.Year) {
            return "This year";
        }

        return d.Year.ToString(culture);
    }

    public static int Compare(DateTime a, DateTime b)
    {
        return Convert(a) == Convert(b) ? 0 : a.CompareTo(b);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后你可以像这样使用它:

view.GroupDescriptions.Add(
    new PropertyGroupDescription("Property", 
        new RelativeDateValueConverter()));

【讨论】:

  • 是的,已经提出了几乎相同的解决方案,所以我会标记为正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多