2

我有一個包含ObservableCollection的SceneNode類。我希望整個樹出現,但我似乎無法得到這個與數據綁定。如果我只是將根添加到樹項目,一切都可以很好地工作。TreeView HierarchicalDataTemplate綁定

class SceneNode 
{ 
    public string Name {get;set;} 
    public ObserveableCollection<SceneNode> ChildrenNodes{get;set;} 
    .... 
} 
class Scene 
{ 
    public SceneNode Nodes{get;set;} 
} 

所以我的場景綁定到樹木的數據上下文和下面是我的樹XAML

<TreeView MinHeight="250" ItemsSource={Binding Path=Nodes} > 
    <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate DataType="{x:Type local:SceneNode}" ItemsSource="{Binding Path=ChildSceneNodes, UpdateSourceTrigger=PropertyChanged}"> 
        <TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" Margin="0,10,0,10" /> 
       </HierarchicalDataTemplate>     
      </TreeView.ItemTemplate> 
</TreeView> 

我顯示與樹控件之前我綁定的數據上下文幕後

sceneTree.Tree.DataContext = theScene; 

沒有任何顯示,但如果不是綁定的數據怎麼辦

sceneTree.Tree.Items.Add(theScene.Nodes); 

樹會顯示,我可以添加和刪除節點,這個活動反映在TreeView中。

+0

爲了解決這個問題我在那個剛剛返回一個新的ObservableCollection場景對象的新屬性。 –

回答

0

這裏的問題是ItemsSource屬性recive一個集合,你正在綁定到一個SceneNode,這不是一個集合。這個問題將得到解決使得綁定到ChildrenNodes屬性:

<TreeView x:Name="treeView" MinHeight="250" ItemsSource="{Binding Nodes.ChildrenNodes}" > 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type WpfBackgroundWorkerQuestion:SceneNode}" ItemsSource="{Binding Path=ChildrenNodes, UpdateSourceTrigger=PropertyChanged}"> 
       <TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" Margin="0,10,0,10" /> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 
+0

還沒有通過綁定在樹中顯示。 –

+0

我在這裏測試過,也許可能是類需要公開,也需要引用Ex ItemsSources =「{Binding ... –

+0

也在我的代碼中我犯了一個錯誤,我寫DataType =」{x:鍵入WpfBackgroundWorkerQuestion:SceneNode}「,設置DataType =」{x:Type local:SceneNode}「 –

相關問題