【问题标题】:WPF: TreeView and nested templatesWPF:TreeView 和嵌套模板
【发布时间】:2009-11-15 17:21:21
【问题描述】:

我正在尝试使用树视图显示一个类,但没有显示任何内容。我用 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}"/>

【问题讨论】:

  • 请参阅下面的评论回复...

标签: wpf treeview datatemplate hierarchicaldatatemplate


【解决方案1】:

我怀疑这与 ProjectTemplate 中嵌套的 Hier-data-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>

【讨论】:

  • Thanks.Binding 到 'Project.Pages' 属性有效,但是我没有从 Project 类中获得额外的属性/属性。如果这会产生影响,则一次只加载一个项目 - 您的示例使用“项目”。
  • TreeView 是一个“ItemsContol”派生。它只能显示列表......这对你的情况意味着......你必须将你的单个项目对象粘贴到一个列表中,然后再将 TreeView 指向它。试一试。
  • 你说得对,应该是用来展示物品的。我已经交换了一些控件,而是使用了一些 TextBlocks。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-02-05
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 2012-01-20
相关资源
最近更新 更多