2012-01-07 171 views
0

樹TreeView的模板,我需要顯示綁定到這種層次的對象樹:與循環型參考

public class Node 
{ 
    public string Name 
    public List<Connector> Connector; 
} 

public class Connector 
{ 
    public string Name 
    public List<Node> TrueChildren; 
} 

這樣一個節點的實際子女都在其他物體。

無法讓TreeView模板使用它。似乎我需要循環模板,這在WPF中是不可能的。我覺得我失去了一些明顯的東西。

+0

你怎麼會* *目前在'TreeView',循環的關係? – Tigran 2012-01-07 23:31:30

+0

Node的實例都是不同的。 n1.Connector(c1,c2,c3)其中c1 =(n2,n3),c2 =(n3),c3 =(n4,n5,n6)其中n2.Connector(c4,c5)...等。值不是循環的。 – 2012-01-08 00:35:07

回答

2

這不一定是循環的,只有當Connector.Children包含對當前節點路徑上更高的節點的引用(甚至應該可以使用虛擬化以某種方式處理)時,它纔是循環的。

通常你只需要創建在TreeView的資源的兩個HierarchicalDataTemplates沒有任何x:KeyDataType設置爲相應的類型。

<TreeView.Resources> 
    <HierarchicalDataTemplate DataType="{x:Type local:Node}" 
           ItemsSource="{Binding Connector}"> 
     <TextBlock Text="{Binding Name}"/> 
    </HierarchicalDataTemplate> 

    <HierarchicalDataTemplate DataType="{x:Type local:Connector}" 
           ItemsSource="{Binding TrueChildren}"> 
     <TextBlock Text="{Binding Name}"/> 
    </HierarchicalDataTemplate> 
<TreeView.Resources> 

(在DataType使用x:Type是很重要的,如果你想知道爲什麼讀property reference

+0

你是對的。我的錯誤是我將這兩個模板放入window.resource中,並試圖通過名稱來綁定它們。 – 2012-01-08 15:13:36