C1HierarchicalDataTemplate / C1TreeView问题

时间:2008-11-14 13:25:52

标签: c# silverlight treeview hierarchicaldatatemplate componentone

我在使用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;
}

有人能看到这些代码片段中的错误吗?

thx,Dom

1 个答案:

答案 0 :(得分:1)

虽然我不熟悉您正在使用的ComponentOne TreeView,尽管您正在使用Silverlight,但在使用HierarchicalDataTemplates时通常在WPF中,您可以告诉模板它的类型。子项目模板同样被告知它们适用于哪种类型。您专门告诉数据模板要使用哪个模板的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>

TreeView:

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

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