3

一部のデータをグループ化していますが、ほとんどの場合、PropertyGroupDescription は正常に機能します。ただし、そのプロパティが DateTime であり、複数の日付を 1 つのグループとしてグループ化したくない場合 (各グループで 30 日など)、新しい GroupDescription が必要になります。問題は、クラスが実際にどのように機能するのか、そのようなクラスをどのように設計するのかがわからないことです。

これもプロパティに基づくため、(基本的な抽象クラスの代わりに) PropertyGroupDescription を継承できることを望んでいますが、ここでは、単一の値 == 1 グループではなく、値の範囲に基づいてグループ化しています。

このようなガイドや準備が整ったクラスはありますか?

4

1 に答える 1

6

少し遅れましたが、あなたが言う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()));
于 2011-12-21T11:21:37.023 に答える