我在使用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
答案 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,因此它可能不适用于您的情况。