У меня проблема с созданием ComponentOne TreeView в Silverlight (C1TreeView) с помощью C1HierarchicalDataTemplate. Подробно дерево показывает только 2 уровня (H1 и H2), хотя 3 уровня определены с помощью HierarchicalDataTemplates, например:
<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>");
Я использую эти шаблоны в Custom TreeView (производном от C1TreeView):
<c1:C1TreeView ... ItemTemplate = "{StaticResource H1Template}">
</c1:C1TreeView>
Конструктор этого TreeView выглядит так:
public MyTreeView(ObservableCollection<H1> h1Items)
{
InitializeComponent();
ItemsSource = h1Items;
}
Кто-нибудь может увидеть ошибку в этих фрагментах кода?
спасибо, Дом





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