WPF:TreeView和嵌套模板

WPF:TreeView和嵌套模板,wpf,treeview,datatemplate,hierarchicaldatatemplate,Wpf,Treeview,Datatemplate,Hierarchicaldatatemplate,我试图使用树状视图显示一个类,但什么也没有显示。我用Snoop检查了容器,看到了StackPanel,但它是空的,甚至项目也有标题和页面。没有绑定错误,我也不知道它为什么不工作 public class Project : INotifyPropertyChanged { public string Title {get;set;} public ObservableCollection<InfoPage> Pages {get;set;} .

我试图使用树状视图显示一个类,但什么也没有显示。我用Snoop检查了容器,看到了StackPanel,但它是空的,甚至项目也有标题和页面。没有绑定错误,我也不知道它为什么不工作

public class Project : INotifyPropertyChanged {
        public string Title {get;set;}
        public ObservableCollection<InfoPage> Pages {get;set;}
    ...

public class InfoPage : INotifyPropertyChanged {
        public string Title {get;set;}
        public ObservableCollection<InfoPage> Pages {get;set;}
    ...

<HierarchicalDataTemplate x:Key="ProjectPageTemplate" ItemsSource="{Binding Pages}">
    <TextBlock Text="{Binding Title}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="ProjectTemplate" ItemsSource="{Binding Pages}">
    <StackPanel>
        <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Title}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/>
    </StackPanel>
    <HierarchicalDataTemplate.ItemTemplate>
        <HierarchicalDataTemplate>
            <TextBlock Text="{Binding Title}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/>
        </HierarchicalDataTemplate>
    </HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
公共类项目:INotifyPropertyChanged{
公共字符串标题{get;set;}
公共可观察集合页面{get;set;}
...
公共类信息:INotifyPropertyChanged{
公共字符串标题{get;set;}
公共可观察集合页面{get;set;}
...
然后在窗口本身上:

public static DependencyProperty ProjectProperty = DependencyProperty.Register("Project", typeof(Project), typeof(WinMain));
public Project Project {
    get { return base.GetValue(ProjectProperty) as Project; }
    set { base.SetValue(ProjectProperty, value); }
}

<TreeView x:Name="trePages" Grid.Row="2" Grid.Column="0" ItemsSource="{Binding Project,ElementName=root,Converter={StaticResource dbg},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ItemTemplate="{StaticResource ProjectTemplate}"/>
public static dependencProperty ProjectProperty=dependencProperty.Register(“Project”、typeof(Project)、typeof(WinMain));
公共工程项目{
获取{return base.GetValue(ProjectProperty)作为项目;}
set{base.SetValue(ProjectProperty,value);}
}

我怀疑这与ProjectTemplate中嵌套的Hier数据模板有关

只是把你的源代码复制到一个空白的项目中,并做了一些改动..以下是对我有用的东西

<Window.Resources>
      <HierarchicalDataTemplate  x:Key="ProjectItemTemplate" ItemsSource="{Binding Pages}">
         <TextBlock Text="{Binding Title}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" Foreground="Red"/>
      </HierarchicalDataTemplate>
      <HierarchicalDataTemplate x:Key="ProjectTemplate" ItemsSource="{Binding Pages}" ItemTemplate="{StaticResource ProjectItemTemplate}">
         <StackPanel>
            <TextBlock Text="{Binding Title}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/>
         </StackPanel>
      </HierarchicalDataTemplate>

   </Window.Resources>
    <Grid>
      <TreeView x:Name="trePages" ItemsSource="{Binding Projects}" ItemTemplate="{StaticResource ProjectTemplate}" />
   </Grid>


谢谢。绑定到“Project.Pages”属性是可行的,但是我没有从Project类中获得额外的属性/属性。如果这有什么不同,一次只加载一个项目-您的示例使用“Projects”。TreeView是一个“ItemsContol”派生。它只能显示列表…这意味着对于您的情况…您必须将单个项目对象粘贴到列表中,然后再将树状视图指向它。尝试一下。您说得对,它确实应该用于显示项目。我已经交换了一些控件,并使用了一些文本块。谢谢。请参阅回复您的评论b私奔。。。