代码之家  ›  专栏  ›  技术社区  ›  Echilon Mafarnakus

WPF:树视图和嵌套模板

  •  0
  • Echilon Mafarnakus  · 技术社区  · 15 年前

    我试图使用TreeView显示类,但没有显示任何内容。我用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>
    

    然后在窗口本身:

    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}"/>
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Gishu    15 年前

    我怀疑这与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>
    
    推荐文章