2017-05-30 35 views
-1

我得到這個XAML代碼已經(負載的TreeView從列表

<TreeView x:Name="treeViewSL" Margin="10,5,875,10" Grid.Row="1"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate 
      DataType="{x:Type OfflineSparepartEntities:ArtikelTreeNode}" 
      ItemsSource="{Binding ArtikelTreeNode}" 
      > 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding NodeText}"/>          
      </StackPanel> 
     </HierarchicalDataTemplate>        
    </TreeView.Resources> 
</TreeView> 

我得到2列表,它給我回正確的數據:

//Data for Root Element 
var root = svc.GetRootArtikelTreeNode(WebSLList, eqNr, LanguageCode.D); 

//Data for Child 
var _childNodes = svc.GetChildArtikelTreeNodes(WebSLList, eqNr, _childParentId, LanguageCode.D); 

我已經與

treeViewSL.ItemsSource = root.NodeText.ToList(); 
treeViewSL.Items.Refresh(); 
試了一下

但後來我只得到這個:

enter image description here

因此只有根元素splited ..

我如何與根節點和子節點得到這在一個正常的樹節點

回答

1

treeViewSL.ItemsSource = root.NodeText.ToList() ;

似乎非常錯誤的我來說,LINQ的功能ToList()在一個字符串返回一個列表中的所有字符。如果我正確理解你的概念,你需要1個根節點和x個子節點。要做到這一點,所有對象應該具有相同的類型。當你有一個簡單的類(或接口)TreeItem(標題:字符串,童車:IEnumerable的),你可以設置的樹視圖的ItemsSource爲這些列表,並驗證碼:

<HierarchicalDataTemplate [...] ItemsSource="{Binding Childs}"> 

將鏈接到兒童收藏。然後您可以訪問DataTemplate中該對象的屬性。

編輯: 這裏是一個工作示例:

public class TreeItem 
{ 
    public string Header { get; set; } 
    public IEnumerable<TreeItem> Childs { get; set; } 
} 

    var items = new List<TreeItem> 
    { 
     new TreeItem 
     { 
      Header = "This is the root", 
      Childs = new[] 
      { 
       new TreeItem {Header = "Child item 1"}, 
       new TreeItem {Header = "Child item 2"} 
      } 
     } 
    }; 

    treeViewSL.ItemsSource = items; 
+0

怎麼你的意思Treeitem,童車? –

+0

只需使用屬性標題(字符串)和Childs(IEnumerable )創建一個簡單的類。然後按照我在答案中所講的內容並查看結果。在瞭解了WPF中TreeView的工作原理之後,您可以將此概念應用於您的(視圖)模型。 – Snicker

+0

我現在用'string header創建了Childs類; IEnumerable _aNode;'並設置itemssource,但當然現在它的空 –