2014-04-11 57 views
1

我有以下類 -WPF TreeView的父節點結合

public class A : INotifyPropertyChanged 
{ 
    public string Name { get; set; } 
    public ObservableCollection<Child> Children { get; set; } 

    ... 
} 

public class Child : INotifyPropertyChanged 
{ 
    public string InstanceName { get; set; } 

    ... 
} 

這裏是我的TreeView XAML -

<TreeView ItemsSource="{Binding ListOfClassA}"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}"> 
      <TextBlock Text="{Binding Path=InstanceName}"/> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

在這種情況下,父類沒有顯示的名稱。我怎樣才能顯示屬性A以及InstanceName屬性Child類。

+0

您的物業需要公開 – thumbmunkeys

+0

他們是在現實生活中公開的,我會進行編輯,以便更清楚。 – Sherlock

回答

1

在你的代碼

<HierarchicalDataTemplate ItemsSource="{Binding Path=Children}"> 
    <TextBlock Text="{Binding Path=InstanceName}"/> 
</HierarchicalDataTemplate> 

實際上是對你的一個類的模板。它應該是:

<HierarchicalDataTemplate ItemsSource="{Binding Path=Children}"> 
    <HierarchicalDataTemplate.ItemTemplate> 
     <HierarchicalDataTemplate> 
      <!-- this is how Child is visualised--> 
      <TextBlock Text="{Binding Path=InstanceName}"/> 
     </HierarchicalDataTemplate> 
    </HierarchicalDataTemplate.ItemTemplate> 
    <!-- this is how A is visualised--> 
    <TextBlock Text="{Binding Path=Name}"/> 
</HierarchicalDataTemplate> 

爲了更好的可見性的代碼,你可以在資源部分寫出來作爲兩個獨立的模板:

<HierarchicalDataTemplate x:Key="Child_template"> 
    <!-- this is how Child is visualised--> 
    <TextBlock Text="{Binding Path=InstanceName}"/> 
</HierarchicalDataTemplate> 

<HierarchicalDataTemplate x:Key="A_template" ItemsSource="{Binding Path=Children}" 
    ItemTemplate="{StaticResource Child_template}"> 
    <!-- this is how A is visualised--> 
    <TextBlock Text="{Binding Path=Name}"/> 
</HierarchicalDataTemplate> 

希望這有助於。 僅供參考:http://msdn.microsoft.com/en-us/library/dd759035(v=vs.95).aspx

+0

嗨迪迪埃 - 感謝您的回答。我收到一個錯誤:'在使用ItemsSource之前,Items集合必須是空的。'當使用這個代碼。我需要做些額外的改變嗎? – Sherlock

+1

這意味着您已經手動添加了一些項目。可能你在某處使用了一些csharp的廣告項目。您無法通過代碼和ItemsSource屬性同時對孩子進行廣告投放。 – Dmitry