有点老问题,但有同样的问题,这里就是我最后做
创建一个IHierarchy接口
interface IHierarchy<T>
{
T Value { get; set; }
IEnumerable<IHierarchy<T>> Children { get; set; }
int Level { get; set; }
}
随后的实现日期层次
private class DateHierarchy : IHierarchy<DateTime>
{
public DateTime Value { get; set; }
public IEnumerable<IHierarchy<DateTime>> Children { get; set; }
public int Level { get; set; }
}
在xaml
<TreeView ItemsSource="{Binding Dates}"
SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock x:Name="Date" />
<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding Level}" Value="1">
<Setter TargetName="Date" Property="Text" Value="{Binding Value, StringFormat=yyyy}" />
</DataTrigger>
<DataTrigger Binding="{Binding Level}" Value="2">
<Setter TargetName="Date" Property="Text" Value="{Binding Value, StringFormat=MMMM}" />
</DataTrigger>
<DataTrigger Binding="{Binding Level}" Value="3">
<Setter TargetName="Date" Property="Text" Value="{Binding Value, StringFormat=dd/MM/yy}" />
</DataTrigger>
</HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
从日期列表构建日期
private void BuildDates()
{
var start = new DateTime(2010, 01, 01);
var end = new DateTime(2015, 12, 31);
var dates = new List<DateTime>();
for (var date = start; date <= end; date = date.AddDays(1))
{
dates.Add(date);
}
var d = from date in dates
group date by date.Year into year
select new DateHierarchy
{
Level = 1,
Value = new DateTime(year.Key, 1, 1),
Children = from date in year
group date by date.Month into month
select new DateHierarchy
{
Level = 2,
Value = new DateTime(year.Key, month.Key, 1),
Children = from day in month
select new DateHierarchy
{
Level = 3,
Value = day,
Children = null
}
}
};
Dates = new ObservableCollection<IHierarchy<DateTime>>(d);
}
最后一种方法,