WPF TreeView数据绑定跟进

时间:2014-02-12 17:50:53

标签: c# wpf xaml treeview

作为first TreeView question on SO的后续内容,我无法将TreeView控件绑定到同一TreeView控件中的Commission对象其Products集合的Id属性。 这是我的简化模型:

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。

1 个答案:

答案 0 :(得分:2)

你在这里喋喋不休。我假设你想要显示委员会的Id并在每个委员会节点下面显示子产品的代码值。

只需要一个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。在你的情况下产品。