2008-11-07 9 views
8

मुझे अभिभावक और बच्चों के गुणों के साथ एक कक्षा मिली है।WPF TreeView बाध्यकारी

ADO.NET Entity Framework Hierarchical Page Class http://img148.imageshack.us/img148/6802/edmxxe8.gif

मैं एक WPF treeview में इस पदानुक्रम प्रदर्शित करना चाहते हैं।

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

<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
      <TextBlock Text="{Binding Path=ShortTitle}" /> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

और मेरी VB कोड ...

 
Dim db As New PageEntities 
Dim t = From p In db.Page.Include("Children") _ 
     Where p.Parent Is Nothing _ 
     Select p 
TreeViewPages.ItemsSource = t 

लेकिन तब मैं केवल दो स्तर नीचे एक पेड़ मिलता है। यह काम करने के लिए मुझे क्या करने की ज़रूरत है?

+0

संबंधित सवाल देखें: http://stackoverflow.com/questions/269523/how-do-i-use-a-wpf-treeview-hierarchicaldatatemplate-with-linq-to-entities#273535 –

उत्तर

11

यह क्यों काम नहीं कर रहा है यह है कि आप केवल TreeView के लिए DataTemplate निर्दिष्ट कर रहे हैं। चूंकि यह TreeViewItems उत्पन्न करता है, यह भी आइटम नियंत्रण है, उन्हें आइटम टेम्पलेट सेट भी होना चाहिए।

आप जो उम्मीद कर रहे हैं उसे हासिल करने का सबसे आसान तरीका है ट्री व्यू (या इसके किसी भी मूल दृश्य) के संसाधनों में पदानुक्रमित डेटाटाम्प्लेट डालना, और हाइरार्किकलडाटा टेम्पलेट के डेटाटाइप को सेट करना ताकि यह आपके सभी आइटमों पर लागू हो ।

आपके कंटेनर की घोषणा (सबसे अधिक संभावना खिड़की) में, आपको नामस्थान पर मैपिंग को परिभाषित करने की आवश्यकता है जहां पृष्ठ परिभाषित किया गया है।

उदा।

<Window ... 
    xmlns:local="clr-namespace:NamespaceOfPageClass;assembly=AssemblyWherePageIsDefined"> 

<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}" /> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType=”{x:Type local:Page}” ItemsSource="{Binding Children}"> 
      <TextBlock Text="{Binding Path=ShortTitle}" /> 
     </HierarchicalDataTemplate> 
    </TreeView.Resources> 
</TreeView> 
+0

datatype = "{x: स्थानीय टाइप करें: पृष्ठ}" त्रुटियां देता है: (1) "टाइप 'पेज नहीं मिला।" और (2) "'स्थानीय' एक अविकसित नामस्थान है।" –

+0

भ्रम के बारे में खेद है, मैंने यह स्पष्ट करने के लिए उत्तर अपडेट किया है कि आपको पृष्ठ वर्ग कहां से प्राप्त करना है, यह निर्दिष्ट करने के लिए आपको एक xmlns घोषणा जोड़ने की आवश्यकता है। –

+0

धन्यवाद। मैंने xmlns जोड़ा: स्थानीय = "clr-namespace: PageManager" और यह अब पेड़ पर नोड्स को templating है। लेकिन मुझे अभी भी केवल एक पेड़ दो स्तर गहरे मिलते हैं। –