Хотя я не знаком с компонентом 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>
И TreeView:
<c1:C1TreeView ItemsSource="{Binding SomeH1List}"/>
Конечно, как я уже сказал, это относится к WPF, поэтому оно может не применяться в вашем случае.