2008-11-06 13 views
14

मुझे अपने .edmx ADO.NET इकाई डेटा मॉडल फ़ाइल में माता-पिता और बच्चों के गुणों के साथ एक पृष्ठ श्रेणी मिली है। यह पन्ने के पदानुक्रम के लिए है।मैं LINQ के साथ LINQ TreeView HierarchicalDataTemplate का उपयोग कैसे करूं?

हटाया मृत ImageShack लिंक - ADO.NET इकाई की रूपरेखा श्रेणीबद्ध पृष्ठ कक्षा

इस पृष्ठ तालिका में एक ParentId विदेशी कुंजी है कि एक ही पृष्ठ तालिका के आईडी प्राथमिक कुंजी के लिए बाध्य के साथ अपने SQL डेटाबेस में नियंत्रित किया जाता है ।

मैं इस पदानुक्रम को एक WPF TreeView में कैसे प्रदर्शित करूं?

+0

आपकी छवि लिंक टूटा हुआ प्रतीत होता है। आप अभी भी मूल छवि है, तो stack.imgur करने के लिए इसे पुन: अपलोड करें, या सिर्फ यह छवि के बिना काम करने के लिए अपने प्रश्न को संपादित करें। धन्यवाद। –

उत्तर

16

मुझे यह Abe Heidebrecht से सहायता के साथ काम मिला। उसके लिए बहुत धन्यवाद।

यहाँ मेरी XAML है ...

<Window x:Class="Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:PageManager" 
    Title="Window1" Height="300" Width="300" Name="Window1"> 
    <Grid> 
     <TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}" TreeViewItem.Expanded="TreeViewPages_Expanded"> 
      <TreeView.Resources> 
       <HierarchicalDataTemplate DataType="{x:Type local:Page}" ItemsSource="{Binding Children}"> 
        <TextBlock Text="{Binding Path=ShortTitle}" /> 
       </HierarchicalDataTemplate> 
      </TreeView.Resources> 
     </TreeView> 
    </Grid> 
</Window> 

यहाँ मेरी Visual Basic कोड है ...

Class Window1 

    Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
     Dim db As New PageEntities 
     Dim RootPage = From p In db.Page.Include("Children") _ 
         Where (p.Parent Is Nothing) _ 
         Select p 
     TreeViewPages.ItemsSource = RootPage 
    End Sub 

    Private Sub TreeViewPages_Expanded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) 
     Dim ExpandedTreeViewItem As TreeViewItem = DirectCast(e.OriginalSource, TreeViewItem) 
     Dim PageId As Guid = DirectCast(ExpandedTreeViewItem.DataContext, Page).Id 
     Dim db As New PageEntities 
     Dim ChildPages = From p In db.Page.Include("Children") _ 
         Where p.Parent.Id = PageId _ 
         Select p 
     ExpandedTreeViewItem.ItemsSource = ChildPages 
    End Sub 
End Class 

विंडो लोड, रूट नोड और उसके बच्चों डेटाबेस से पूछे और डाला जाता है जब पेड़ में

हर बार जब नोड का विस्तार होता है, तो नोड के बच्चों और पोते-पोते डेटाबेस से पूछे जाते हैं और पेड़ में डाले जाते हैं।

+1

इस तरह के कोडबेंड के साथ आप '' – 0x49D1

+0

के बजाय 'डेटा टेम्पलेट' का उपयोग कर सकते हैं पृष्ठ प्रबंधक क्या है ?? –

5

एक अलग तरह: (अच्छी तरह से, बहुत समान है, लेकिन थोड़ा अलग)

अपने विंडो लोड समारोह में:

PageEntities db = new PageEntities(); 
TreeViewPages.ItemsSource = db.Page.Where(u=>u.Parent==null); 

एक नई फ़ाइल Page.cs

public partial class Page { 
    public ObjectQuery<Page> LoadedChildren { 
     get { 
      var ret = Children; 
      if(ret.IsLoaded==false) ret.Load(); 
      return ret; 
     } 
    } 
} 

में बनाएं आपका एक्सएएमएल:

<TreeView Name="TreeViewPages"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemSource="{Binding LoadedChildren}"> 
      <TextBlock Text="{Binding ShortTitle}" /> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

इसका परीक्षण नहीं किया गया है, लेकिन आपको सामान्य विचार प्राप्त करना चाहिए।

+0

यह विधि पूरे पदानुक्रम को एक साथ में लोड करती है। पहले स्वीकृत उत्तर बाल नोड्स की ऑन-डिमांड लोडिंग है। –

1

दूसरा समाधान मेरे लिए सबसे अच्छा काम करता है। मैं पुनरावर्ती वस्तुओं की एक सूची है, इसलिए यह XAML है कि मैं प्रयोग किया जाता है:

<TreeView Height="Auto" HorizontalAlignment="Stretch" Name="trvVaults" VerticalAlignment="Stretch" Width="Auto" Grid.Column="0" Margin="5"> 
    <!-- Treeview ItemsSource is loaded programmatically --> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Vaults}"> 
      <TextBlock Text="{Binding Name}" /> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

प्रत्येक 'वॉल्ट' ऑब्जेक्ट कई गुण (नाम, स्थान, आदि) और 'Vaults' की एक सामान्य सूची है।