上記の TI からの回答は素晴らしく、多くの時間を節約できました。私が行ったように、クエリ構文の代わりにメソッド構文でこれを必要とする可能性のある人のために、ここに更新を投稿します。
var d = dates.GroupBy(date => date.Year)
.Select(year => new DateHierarchy
{
Level = 1,
Value = new DateTime(year.Key, 1, 1),
Children = year.GroupBy(date => date.Month)
.Select(month => new DateHierarchy
{
Level = 2,
Value = new DateTime(year.Key, month.Key, 1),
Children = month.GroupBy(date => date.Day)
.Select(day => new DateHierarchy
{
Level = 3,
Value = new DateTime(year.Key, month.Key, day.Key),
Children = null
})
})
});
また、アイテムを曜日別にグループ化する必要もありました。これを行うには、次のようにCultureInfo.CurrentCulture.Calendar.GetWeekOfYear()とISOWeek.ToDateTime()を使用できます。
var d = dates.GroupBy(date => date.Year)
.Select(year => new DateHierarchy
{
Level = 1,
Value = new DateTime(year.Key, 1, 1),
Children = year.GroupBy(date => date.Month)
.Select(month => new DateHierarchy
{
Level = 2,
Value = new DateTime(year.Key, month.Key, 1),
Children = month.GroupBy(date => CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Sunday))
.Select(week => new DateHierarchy
{
Level = 3,
Value = ISOWeek.ToDateTime(year.Key, week.Key, DayOfWeek.Sunday),
WeekOfYear = week.Key,
Children = week.GroupBy(date => date.Day)
.Select(day => new DateHierarchy
{
Level = 4,
Value = new DateTime(year.Key, month.Key, day.Key),
Children = null
})
})
})
});
これを正しく構築して表示するには、 DateHierarchyクラスにWeekOfYearプロパティを追加し、 xamlに適切なDataTrigger を追加する必要があります。