2013-10-13 19 views
0

我想 - 作爲一個完整的WPF小白 - 創建一個綁定「樹視圖」的分層數據,使用HumanResources.Emplpoyee表了AdventureWorks數據庫中,通過EF 5碼第一位。下面舉一些例子,我想出了以下內容,運行時會產生一個完全空白的MainWindow我的TreeView在哪裏?

<Window x:Class="FlatTree.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:models="clr-namespace:AdventureWorks.Models;assembly=AdventureWorks" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TreeView DataContext="{Binding}" ItemsSource="{Binding Employees}"> 
      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding Subordinates}" DataType="{x:Type models:Employee}"> 
        <TreeViewItem Header="{Binding Title}"/> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
     </TreeView> 
    </Grid> 
</Window> 

和:

public partial class MainWindow : Window 
{ 
    public IEnumerable<Employee> Employees { get; set; } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     var ctx = new AdventureWorksContext(); 
     Employees = TreeBuilder.BuildEmployeeTree(ctx.Employees); 
    } 
} 

BuildEmployeeTree作品,並打開僱員實體的名單,與他們ManagerIdSubordinates(從Employee1重命名)特性,成樹模型,就像這樣:

public static IEnumerable<Employee> BuildEmployeeTree(IEnumerable<Employee> employees) 
{ 
    var flatTree = employees.ToList(); 
    foreach (var emp in employees) 
    { 
     if (emp.ManagerID != null) 
     { 
      var manager = flatTree.Single(e => e.EmployeeID == emp.ManagerID); 
      manager.Subordinates.Add(emp); 
     } 
    } 
    return flatTree; 
} 

什麼我沒有做,或者做錯了什麼?

回答

0

您還沒有設置您的WindowDataContext,你可以初始化後設置它在構造函數中

public MainWindow() 
{ 
    InitializeComponent(); 
    var ctx = new AdventureWorksContext(); 
    Employees = TreeBuilder.BuildEmployeeTree(ctx.Employees); 
    DataContext = this; 
}