2009-11-15 152 views
0

我想显示一个使用树视图的类,但没有显示。我使用Snoop检查了容器,并且看到了StackPanel,但它是空的,即使项目确实有标题和页面。没有绑定错误,我不知道为什么它不起作用。WPF:TreeView和嵌套模板

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> 

然后在窗口本身:

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}"/> 
+0

见回复如下您的评论... – Gishu 2009-11-16 05:10:09

回答

1

我怀疑它有事情做与嵌套在ProjectTemplate海尔-数据TEMPL。

只是将你的源代码复制到一个空白的项目中,并玩了一下。以下是对我有用的东西。

<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> 
+0

Thanks.Binding到“Project.Pages”属性的作品,但我没有得到从项目类中的额外的属性/特性。一次只能加载一个项目,如果这有所影响 - 您的示例使用“项目”。 – Echilon 2009-11-15 20:56:49

+0

TreeView是一个“ItemsContol”派生。它只能显示列表......这意味着你的情况..你必须将你的单个项目对象粘贴到列表中,然后指向TreeView。试一试。 – Gishu 2009-11-16 05:10:57

+0

你是对的,它应该用来显示Items。我已经将这些控件换了一点,并且正在使用一些TextBlocks。 谢谢。 – Echilon 2009-11-16 10:49:06