2009-07-31 29 views
3

私はツリービューで2つのクラスを表示したいと思います。異なるタイプのネストされたオブジェクトでwpf treeviewを使用する方法

私のメインウィンドウでは、ある種のオブジェクトの観測可能なコレクションがあり、そのオブジェクトをオブジェクトと呼びます。 オブジェクトaには、オブジェクトbの別のタイプのオブザーバブルなコレクションが含まれています。 各オブジェクトbには、オブジェクトbの観測可能なコレクションが含まれています。例えば

は、私が

--ListOfObjectBの

--- ObjectBに

---- ListOfObjectB年代、この

ListOfObjectAの

-ObjectA1のように見える何かを持っているかもしれません

----- ObjectB

-ObjectA2

--ListOfObjectBの

--- ObjectBに

は私のXAMLはそのような何かにツリービューをバインドしたいと何を見てする必要がありますか?

申し訳ありませんが私はこれをよく説明していない場合は、私はwpfを初めて使いました。

答えて

6

RBが適切です。これは、WPFのテンプレートを通常の.NETオブジェクトに適用する機能が非常に強力になります。

aのオブジェクトにはHierarchicalDataTemplates、もう1つはタイプbのオブジェクトを指定する必要があります。このような何か:

<TreeView> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate TargetType="{x:Type local:a}"> 
      <!-- XAML to display objects of type a --> 
     </HierarchialDataTemplate> 
     <HierarchicalDataTemplate TargetType="{x:Type local:b}"> 
      <!-- XAML to display objects of type b --> 
     </HierarchicalDataTemplate> 
    </TreeView.Resources> 
</TreeView> 

WPFはどこから子オブジェクトを取得する知っているように、あなたは各テンプレートのItemsSourceプロパティのバインディングを指定する必要があります。また、xmlns宣言をルートノードに追加する必要があります。この宣言は、オブジェクトが存在する名前空間を指定します(上記のサンプルコードのlocalで表されます)。

1

私は本当に危険なWPFを知っていますが、私はHierarchicalDataTemplateがあなたの問題の解決策であると確信しています。私のXAMLスキルはiffyなので、良いサンプルコードを書くことはできません。プロジェクトでHierarchicalDataTemplateを使用した方法は次のとおりです。これがあなたに良いアイデアを与えることを願っています。

<TreeView Grid.Row="1" 
      Grid.Column="1" 
      ItemsSource="{Binding Children}" 
      SelectedItemChanged="TreeView_SelectedItemChanged" 
      ContextMenu="{StaticResource MenuContextMenu}"> 

    <TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding Children}" > 
     <!--<TextBlock Text="{Binding Path=ItemName}" Margin="5,0,5,0" />--> 
     <Grid ContextMenu="{StaticResource ContextMenu}" > 
     <TextBlock Name="ShownItem" 
          Text="{Binding Path=ItemName}" 
          Margin="0,0,0,0" /> 

      <TextBox Name="EditBox" 
       Text="{Binding Path=ItemName}" 
       Visibility="{Binding Path=Visibility}" 
       Style="{StaticResource EditableTextBox}" 
       IsVisibleChanged="EditBox_IsVisibleChanged" 
       PreviewKeyDown="EditBox_KeyDown" 
       Margin="0,2,0,2" 
        > 

       </TextBox> 

     </Grid> 
    </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 
関連する問題