2014-02-12 49 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

不客气的大卫。 :) –