我有一个类SceneNode,它包含一个ObservableCollection。我希望整个树都显示出来,但是我似乎无法将其用于数据绑定。如果我只是把根添加到树项目中,一切都会很完美。
class SceneNode
{
public string Name {get;set;}
public ObserveableCollection<SceneNode> ChildrenNodes{get;set;}
....
}
class Scene
{
public SceneNode Nodes{get;set;}
}
因此,我将场景绑定到Trees数据上下文,下面是我的树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中。
这里的问题是ItemsSource属性接收了一个Collection,而您正在绑定到不是集合的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>