2009-11-13 60 views
0

我想知道是否有人可以提供以下簡單示例。 (最好在VB.Net):LINQ to SQL作爲WPF Treeview的數據綁定源

我有一個SQL數據庫與相關的表,我成功地在我的應用程序的其他領域使用LINQ to SQL,但有點卡住了Heirarchical Treeview。

我只想從數據庫中使用LINQ查詢作爲WPF TreeView的源代碼。如果我可以將TreeView的ItemsSource設置爲我的LINQ結果,並將樹視圖項目的數據綁定設置爲將使我一天的各個列,但我似乎無法讓它烹飪。

花了幾個小時尋找網絡後,我找不到很多例子顯示這非常簡單。我發現了類似的想法,但對於像我這樣的新手來說,沒有任何簡單和具體的東西。

據我所知,在執行LINQ查詢時,DBML文件中定義的關係應該保持不變。那麼,我可以像TreeView的ItemsSource一樣嗎?

Dim pdc As New ProjectDataContext() 
Public Property Selection() As Integer 

Dim tree = From c In pdc.Customers _ 
      Where c.CustomerID = _Selection _ 
      Select c 

projecttreeview.ItemsSource = tree 

然後,對於樹視圖項目的綁定可能只是{結合客戶名稱)的父節點,並說{結合Orders.OrderName}作爲子節點。例如:

<TreeView Name="projecttreeview"> 
    <TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding Customers}"> 
     <TextBlock.Text="Binding CustomerName}"/> 
     <HierarchicalDataTemplate.ItemTemplate> 
      <DataTemplate> 
      <TextBlock.Text="{Binding Orders.OrderName}"/> 
      </DataTemplate> 
     </HierarchicalDataTemplate.ItemTemplate> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

很明顯,這並不像我想的那麼簡單。任何指針將不勝感激。

回答

0

首先,讓我澄清一個問題,你可能會遇到:當您使用查詢作爲ItemsSource,那麼ItemsControl將不反映任何變更後,你將重新運行查詢,所以,分配給ItemsSource查詢與將其分配給轉換爲數組的查詢結果非常相似。其次,要訪問相關的對象/集合(無論你做什麼 - 它是一個DataTemplate還是簡單的代碼),你必須在創建查詢時明確指出它。在實體框架中,你可能會這樣做,通過Include方法如下:treeview.ItemsSource = tree.Include("Orders") - 它將強制引擎對數據庫進行SQL查詢JOIN

+0

P.S.我其實不知道LINQ to SQL,所以你必須閱讀MSDN的正確方法來包含相關對象,但已經給出了「指針」:) – archimed7592 2009-11-13 21:00:57

+0

感謝您的提示, 我有一種感覺,問題與其他表不正確。 調查使用「包含」語句的最佳方式,它似乎是它自己的一個小雷區... – yimbot 2009-11-14 10:22:07

+0

查看[this]中的關係主題(http://msdn.microsoft.com/en-us/library /bb425822.aspx#linqtosql_topic11)教程 - 有一些示例如何做到這一點。像這樣: DataShape ds = new DataShape(); ds.LoadWith (c => c.Orders); db.Shape = ds; var q = from c in db.Customers where c.City ==「London」 select c; HTH。 – archimed7592 2009-11-14 21:21:45