【问题标题】:WPF TreeView databinding follow upWPF TreeView 数据绑定跟进
【发布时间】:2014-02-12 17:50:52
【问题描述】:

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

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。合约返回一组佣金对象(Commissions)。我已经注释掉了用于返回产品的 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>

如果两个 HierarchicalDataTemplate 均未注释,则会引发错误,因为我使用了唯一的(佣金类型)两次,但我不知道如何在不使用佣金类型作为模板的 DataType 的情况下使任一 HierarchicalDataTemplate 工作。

【问题讨论】:

    标签: c# wpf xaml treeview


    【解决方案1】:

    你在这里把事情搞混了。我假设您想显示佣金的 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。在你的情况下是产品。

    【讨论】:

    • 很好的答案,我喜欢这个解释!谢谢!
    猜你喜欢
    • 2011-09-12
    • 2022-09-30
    • 2018-03-14
    • 2014-08-09
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多