2014-02-12 72 views
1

作爲我的first TreeView question on SO的後續,我無法將TreeView控件綁定到我的委員會對象其Products集合的Id屬性在同一個TreeView控件中。 這裏是我的簡化模型:WPF TreeView數據綁定跟進

internal class Contract 
{ 
    public string Name { get; set; } 
    public ObservableCollection<Commission> Commissions { get; set; } 
} 

internal class Commission 
{ 
    public string Id { get; set; } 
    public ObservableCollection<Product> Products { get; set; } 
} 

internal class Product 
{ 
    public string Code { get; set; } 
} 

這裏是我的問題XAML。合同返回一組委員會對象(佣金)。我已經註銷了返回產品的HierarchicalDataTemplate。無論是HierarchicalDataTemplate將獨立工作,但如果兩者都沒有註釋:

<TreeView ItemsSource="{Binding Contract.Commissions}"> 
        <TreeView.Resources> 
         <HierarchicalDataTemplate DataType="{x:Type m:Commission}"> 
          <TextBlock Text="{Binding Id}" /> 
         </HierarchicalDataTemplate> 
        <!--<HierarchicalDataTemplate DataType="{x:Type m:Commission}" ItemsSource="{Binding Products}"> 
          <TextBlock Text="{Binding Code}" /> 
         </HierarchicalDataTemplate>--> 
        </TreeView.Resources> 
       </TreeView> 

如果兩個HierarchicalDataTemplates都註釋掉,因爲我使用的是獨特的(佣金類型)兩次拋出一個錯誤,但我不知道如何使HierarchicalDataTemplate無需使用Commission Type作爲模板的DataType即可工作。

回答

2

你在這裏混淆了一些東西。我假設你想顯示佣金標識,並在每個佣金節點下面顯示子產品的代碼值。

只有一個委員會HierarchicalDataTemplate是必要的,一個DataTemplate的產品:

<TreeView.Resources> 
    <HierarchicalDataTemplate DataType="{x:Type m:Commission}" 
          ItemsSource="{Binding Products}"> 
     <TextBlock Text="{Binding Id}" /> 
    </HierarchicalDataTemplate> 
    <DataTemplate DataType="{x:Type m:Product}"> 
     <TextBlock Text="{Binding Code}" /> 
    </DataTemplate> 
</TreeView.Resources> 

說明

  • 聲明HierarchicalDataTemplate對於一個需要包含子節點的節點。在你的情況下委員會。
  • ItemsSource設置爲您需要在這些節點下顯示的子集。在你的情況Products
  • 最後,爲不包含任何子節點的節點聲明DataTemplate。在你的情況產品。
+1

很好的答案,我喜歡解釋!謝謝! –

+0

不客氣的大衛。 :) –