2013-02-14 81 views
0

我有下面的类:集团日期按年,月,日在WPF树视图

public class BankingEntry 
{ 
    private DateTime entryDate; 
    public DateTime EntryDate { get { return entryDate; } } 
} 

我想要一个ObservableCollection < BankingEntry>对象绑定到WPF树视图的ItemsSource时,并有项目展示在下面的树结构:

---新年

------月

---------日

所以,如果我收集了3项与2012-12-30,2012-12-31和2013-01-01入学日期,如果能得到以下的树视图结构:

--- 2012

------ 12

--------- 30

--------- 31

--- 2013

------ 01

--------- 01

理想我想树视图当一个项目被添加或从集合中删除自动更新。对象的日期不会改变,所以我不必担心更新。

在此先感谢

回答

0

有点老问题,但有同样的问题,这里就是我最后做

创建一个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); 
} 

最后一种方法,