2013-03-29 26 views
0

的子元素如何創建樹形像這樣的:WPF的TreeView如何添加樹型視圖控件模板用於樹型視圖

<TreeViewItem Header="Customers" ItemsSource="{Binding Customers}"> 
  • 客戶
    • 安娜
      • 刪除
      • 打開
    • 彼得
      • 刪除
      • 打開
    • 安德魯
      • 刪除
      • 打開

我想創建子項模板像這樣

<TreeViewItem Header="{Binding Header}"> 
    <TreeViewItem Header="Delete"/> 
    <TreeViewItem Header="Open"/> 
</TreeViewItem> 

但它確實不是很好,因爲我最終樹型視圖用的DataTemplate樹型視圖相當的工作,但我想重寫子元素的控件模板,而不是父母。 當然,我想避免我的綁定是TreeViewItem,也不想創建那些靜態對象「打開」,「刪除」的孩子。

+0

是刪除並打開只是操作? –

+0

是的,這些對於所有樹項都是不變的,所以我想在XAML中構建它們。這就是爲什麼我要使用樹型視圖爲DataTemplate中(這是obviosly錯,但你讓我的想法) –

+0

你真的需要使用TreeView控件或只是想的項目類似的安排? –

回答

3

Here約爲TreeView我讀過的最好的文章之一。

Inside TreeView.Resources如果刪除和打開命令是某些集合的項目,則可以聲明多個具有不同DataType的數據模板。 (命令的TargetType將爲ICommand)。

但在我看來,你根本不需要TreeView。 客戶是列表的標題。如果你想讓它成爲epxpandable,使用Expander控制。
然後爲每個客戶提供一個數據模板就足夠了。

<DataTemplate DataType="CustomerTypeName"> 
    <Expander Header="{Binding CustomerName}"> 
     <Button Command="{Binding DeleteCustomerCmd}" Content="Delete" Margin="15,0,0,0"/> 
     <Button Command="{Binding OpenCustomerCmd}" Content="Open" Margin="15,0,0,0"/> 
    <Expander/> 
<DataTemplate> 

但是,在這裏你會遇到一些麻煩,選擇亮點。

public class CommandWrapper 
{ 
    ICommand Command {get;set;} 
    string CommandName {get;set;} 
} 

public class CustomerViewModel 
{ 
    Customer Customer {get;set;} 
    IEnumerable<CommandWrapper> Commands {get;} 
} 

讓客戶收集CustomerViewModel。 然後下面的XAML可以幫助:

<TreeView ItemsSource="{Binding ...}"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="TypeHoldingCustomersCollection" 
      ItemsSource="{Binding Customers}"> 
      <TextBlock Text="Customers"/> 
     </HierarchicalDataTemplate> 

     <HierarchicalDataTemplate DataType="CustomerViewModel" 
      ItemsSource="{Binding Commands}"> 
      <TextBlock Text="{Binding Path=Customer.Name}"/> 
     </HierarchicalDataTemplate> 

     <DataTemplate DataType="CommandWrapper"> 
      <Button Content="{Binding CommandName}" Command="{Binding Command}"/> 
     </DataTemplate> 
    </TreeView.Resources> 
</TreeView> 
+0

我需要把這個TreeView中,因爲客戶在其他節點的更大的樹視圖:。?/ –

+0

好吧,我得到它你還需要命令(刪除和Open)是樹節點 –

+0

我猜所以,讓它們看起來一樣在其他地方,並有相同的設計。如果他們是樹節點並不重要,但如果他們成功了,他們應該同所有的樹(我猜) –

0

你會想爲此使用HierarchicalDataTemplate。

here for a step-by-step tutorial

+0

嗨,那個鏈接不是很有幫助。它將數據模板更改爲文本框,但我需要將定製的TreeViewItem層次結構放在那裏。 :( –