1

我在使用 C1HierarchicalDataTemplate 在 Silverlight (C1TreeView) 中构建 ComponentOne TreeView 时遇到问题。详细而言,树仅显示 2 个级别(H1 和 H2),尽管通过 HierarchicalDataTemplates 定义了 3 个级别,例如:

<c1:C1HierarchicalDataTemplate x:Key="H3Template">
          <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" />
     </c1:C1HierarchicalDataTemplate>

    <c1:C1HierarchicalDataTemplate x:Key="H2Template" ItemsSource="{Binding Path=H3Items}" ItemTemplate="{StaticResource H3Template}">
        <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" />
    </c1:C1HierarchicalDataTemplate>

    <c1:C1HierarchicalDataTemplate x:Key="H1Template" ItemsSource="{Binding Path=H2Items}" ItemTemplate="{StaticResource H2Template}">
        <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" />
    </c1:C1HierarchicalDataTemplate>");

我在自定义 TreeView(源自 C1TreeView)中使用此模板:

 <c1:C1TreeView ... ItemTemplate="{StaticResource H1Template}">
 </c1:C1TreeView>

此 TreeView 的构造函数如下所示:

public MyTreeView(ObservableCollection<H1> h1Items)
{
    InitializeComponent();
    ItemsSource = h1Items;
}

任何人都可以看到这些代码片段中的错误吗?

谢谢,多姆

4

1 回答 1

1

虽然我不熟悉您正在使用的 ComponentOne TreeView,并且尽管您使用的是 Silverlight,但通常在 WPF 中,当您使用 HierarchicalDataTemplates 时,您告诉模板它的类型。子项模板同样被告知它们适用于什么类型。您没有具体告诉数据模板要为其使用什么模板是 ItemTemplate。这是系统根据对象的类型自动计算出来的。当您将项目集合绑定到 TreeView 时,这适用——您不必指定 ItemTemplate。

因此,在您的情况下(local:是在您的 xaml 顶部定义的命名空间):

<c1:C1HierarchicalDataTemplate DataType="{x:Type local:H1}" 
                               ItemsSource="{Binding Path=H2Items}">
  <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" />
</c1:C1HierarchicalDataTemplate>

<c1:C1HierarchicalDataTemplate DataType="{x:Type local:H2}" 
                               ItemsSource="{Binding Path=H3Items}">
  <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" />
</c1:C1HierarchicalDataTemplate>

<c1:C1HierarchicalDataTemplate DataType="{x:Type local:H3}">
  <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" />
</c1:C1HierarchicalDataTemplate>

树视图:

<c1:C1TreeView ItemsSource="{Binding SomeH1List}"/>

当然,正如我所说,这适用于 WPF,因此它可能不适用于您的情况。

于 2010-03-22T10:16:43.240 回答