0

私は同様の問題を伴う複数のポストを見てきました。今や最終的に私はすべてのデータを画面上に表示しますが、私が望むやり方ではありません。WPF TreeView HierarchicalDataTemplate - 複数の子コレクションを持つオブジェクトへのバインド - >リロード

/// <summary> 
/// Returns a collection of all the ContinentListViewModel objects 
/// </summary> 
public static IList<Object> Items 
{ 
    get 
    { 
     IList<object> childNodes = new List<object>(); 


     foreach (ContinentViewModel continent in _instance) 
     { 
      childNodes.Add(continent); 
      foreach (CountryViewModel country in continent.CountrytList) 
      { 
       childNodes.Add(country); 
       foreach (BusinessunitViewModel bu in country.BusinessunitList) 
       { 
        childNodes.Add(bu); 
       } 
      } 
     } 
     return childNodes; 
    } 
} 

これは私のXAML-TreeViewコントロールコードです:しかし

は、私はこのようなデータを提供してViewModelには、持っている...始めましょう

  <TreeView Name="tvwBuList" ItemsSource="{Binding BusinessunitList.Items}" HorizontalAlignment="Left" VerticalAlignment="Top" MinHeight="230" MinWidth="265" MaxHeight="230" MaxWidth="265"> 
       <TreeView.Resources> 
        <HierarchicalDataTemplate DataType="{x:Type local:ContinentViewModel}" ItemsSource="{Binding}"> 
          <TextBlock Text="{Binding Path=ContinentCode}" /> 
         </HierarchicalDataTemplate> 
        <HierarchicalDataTemplate DataType="{x:Type local:CountryViewModel}" ItemsSource="{Binding}"> 
          <TextBlock Text="{Binding Path=CountryCode}" /> 
        </HierarchicalDataTemplate> 
        <DataTemplate DataType="{x:Type local:BusinessunitViewModel}"> 
         <RadioButton GroupName="BUGroup" Content="{Binding Path=BuCode}" /> 
        </DataTemplate> 
       </TreeView.Resources> 
       <TreeView.ItemContainerStyle> 
        <Style TargetType="TreeViewItem"> 
         <!--Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/--> 
         <Setter Property="IsExpanded" Value="True"/> 
         <Setter Property="Foreground" Value="Yellow"/> 
        </Style> 
       </TreeView.ItemContainerStyle> 
      </TreeView> 

そして、これは何ですか出力は次のようになります。

http://imgh.us/bu_treeview.jpg

すみませんが、私はありませんよだから私は何をしないのです...

+ AP 
|--+ AU 
    O-- 164 
|--+ CN 
    O-- 258 
    O-- 277 

:私が持っていると思いますどのような

...私と一緒にそう裸、新規ユーザーとして写真をアップロードすることができ、このような完全な構造でありますここに?ヘルプありがとう、ありがとう!

答えて

2

あなたのforループがそれらを同じコレクションに入れているため、HierarchicalDataTemplatesはツリーの同じレベルにあります。基本的に、コレクションはXAMLのバインドと一致しません。

私はあなたが望むレベルごとに別々のコレクションが必要になると思っています。だから大陸には1つのコレクションが必要で、国には2つ目のコレクションが必要です。

次に、あなたはこれにあなたのリソースを更新する必要があります:

 <TreeView Name="tvwBuList" ItemsSource="{Binding BusinessunitList.Items}" HorizontalAlignment="Left" VerticalAlignment="Top" MinHeight="230" MinWidth="265" MaxHeight="230" MaxWidth="265"> 
      <TreeView.Resources> 
       <HierarchicalDataTemplate DataType="{x:Type local:ContinentViewModel}" ItemsSource="{Binding Path=Continents}"> 
         <TextBlock Text="{Binding Path=ContinentCode}" /> 
        </HierarchicalDataTemplate> 
       <HierarchicalDataTemplate DataType="{x:Type local:CountryViewModel}" ItemsSource="{Binding Path=Countries}"> 
         <TextBlock Text="{Binding Path=CountryCode}" /> 
       </HierarchicalDataTemplate> 
       <DataTemplate DataType="{x:Type local:BusinessunitViewModel}"> 
        <RadioButton GroupName="BUGroup" Content="{Binding Path=BuCode}" /> 
       </DataTemplate> 
      </TreeView.Resources> 
      <TreeView.ItemContainerStyle> 
       <Style TargetType="TreeViewItem"> 
        <!--Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/--> 
        <Setter Property="IsExpanded" Value="True"/> 
        <Setter Property="Foreground" Value="Yellow"/> 
       </Style> 
      </TreeView.ItemContainerStyle> 
     </TreeView> 

何をしたいあなたを与える必要があります。私はtreeviewを使ってメッセージ構造を定義するために同じモデルを使用しました。私たちのコードとの唯一の違いは、独自のコレクションに各レベルを持ち、そのコレクションに明示的にバインドすることです。

+0

こんにちは...あなたは正しい、それは問題だった... Thanx alot! :) – dennis

+0

私はあなたと同じような問題を抱えていました。私は基底クラスのコレクションで継承を使用していたし、1つのコレクションと階層を型から外すほど十分にスマートであると考えました。私が別々のコレクションにそれらを壊すとすぐに、それははるかにうまくいった。 – Josh

関連する問題