WPF: TreeView и вложенные шаблоны - PullRequest
0 голосов
/ 15 ноября 2009

Я пытаюсь отобразить класс, используя древовидную структуру, но ничего не отображается. Я осмотрел контейнер с помощью 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 Ответ

1 голос
/ 15 ноября 2009

Я подозреваю, что это как-то связано с вложенным Hier-data-templ в ProjectTemplate.

Просто скопировал ваш источник в пустой проект и немного поиграл .. Вот что сработало для меня.

<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>
...