Wpf TreeView HierarchycalDataTemplate绑定

Wpf TreeView HierarchycalDataTemplate绑定,wpf,data-binding,treeview,datacontext,hierarchicaldatatemplate,Wpf,Data Binding,Treeview,Datacontext,Hierarchicaldatatemplate,我有一个类SceneNode,它包含一个可观察的集合。我希望整个树都显示出来,但是我似乎无法让它与数据绑定一起工作。如果我只是将根添加到树项目中,那么一切都会完美工作 class SceneNode { public string Name {get;set;} public ObserveableCollection<SceneNode> ChildrenNodes{get;set;} .... } class Scene { public Scen

我有一个类SceneNode,它包含一个可观察的集合。我希望整个树都显示出来,但是我似乎无法让它与数据绑定一起工作。如果我只是将根添加到树项目中,那么一切都会完美工作

class SceneNode
{
    public string Name {get;set;}
    public ObserveableCollection<SceneNode> ChildrenNodes{get;set;}
    ....
}
class Scene
{
    public SceneNode Nodes{get;set;}
}
但是,如果我不绑定数据,则不会显示任何内容

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

树将显示,我可以添加和删除节点,此活动反映在树视图中。

这里的问题是ItemsSource属性接收到一个集合,而您正在绑定到一个不是集合的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>

这里的问题是ItemsSource属性接收一个集合,而您正在绑定到一个场景节点,而该场景节点不是集合。通过绑定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>

为了解决这个问题,我在Scene对象中创建了一个新属性,它只返回一个新的ObservableCollection。为了解决这个问题,我在Scene对象中创建了一个新属性,它只返回一个新的ObservableCollection。我在这里测试了这个属性,可能是类需要是公共的,而且绑定需要引用ItemsSources={Binding…同样在我的代码中我犯了一个错误,我写了DataType={x:Type WpfBackgroundWorkerQuestion:sceneode},instite of DataType={x:Type local:sceneode}我在这里测试了这个,可能是类需要是公共的,而且绑定需要引用exitemsources={Binding…同样在我的代码中我犯了一个错误,我写了DataType={x:Type WpfBackgroundWorkerQuestion:SceneNode},instite of DataType={x:Type local:SceneNode}
    <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>