C1HierarchicalDataTemplate / C1TreeView Проблема - PullRequest
1 голос
/ 14 ноября 2008

У меня проблема с созданием 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>");

Я использую эти шаблоны в пользовательском TreeView (производном от C1TreeView):

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

Конструктор этого TreeView выглядит так:

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

Кто-нибудь может увидеть ошибку в этих фрагментах кода?

thx, Dom

1 Ответ

1 голос
/ 22 марта 2010

Хотя я не знаком с компонентом 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, поэтому оно может не применяться в вашем случае.

...