1

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、ドム

4

1 に答える 1

1

使用しているComponentOneTreeViewに慣れていませんが、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に適用されるため、あなたの場合には適用されない可能性があります。

于 2010-03-22T10:16:43.240 に答える