2009-11-15 97 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