2017-10-29 6 views
-3

WPFで静的なルートレベルで複数レベルのTreeViewを作成しようとしていますが、それを実現できません。C#wpfオブジェクトからの3レベルのツリービュー

は、ここに私が探している結果である:ここで

treeview

は、私が使用するクラスです。

public class Project 
{ 
    Project() 
    { 
     Systems=new ObservableCollection<System>(); 
     Systems.Add(new System(Type="TypeA","SubTypeAA","SysA")); 
     Systems.Add(new System(Type="TypeB","SubTypeBA","SystemA")); 
     // ... 
    } 


    public ObservableCollection<System> Systems; 
    // ... 
} 

class System 
{ 
    System(string type, string subType, string name) 
    { 
     Type = type; 
     SubType = subType; 
     Name = name; 
    } 

    public string Type{get;} 
    public string SubType{get;} 
    public string Name{get;} 

    // ... 
} 

私のDataContextはので、私は私の考えるプロジェクトである私のXAMLについてTreeView ItemsSourceはシステムになりますが、その後、私はそれを動作させる方法について混乱します。

最初のアイテム/レベルSysetemsは

ありがとう '静的' です。

+0

こんにちは。 Treeviewで作業するときは、再帰的な構造を考える必要があります。すべてのレベルには、自分の子供のリスト(基本的に)が含まれています。ここでは、[WPF TreeView with HierarchicalDataTemplate](https://stackoverflow.com/questions/46947894/wpf-treeview-with-hierarchicaldatatemplate-and-observablecollection-containing-c/46950219#46950219) – Bob

答えて

0

最初の手順は簡単です。

public class SingleInstanceToCollectionConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return new List<object> {value}; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return DependencyProperty.UnsetValue; 
    } 
} 
<Window.Resources> 
    <local:SingleInstanceToCollectionConverter x:Key="SingleInstanceToCollectionConverter"/> 
</Window.Resources> 
<TreeView ItemsSource="{Binding Project, Converter={StaticResource SingleInstanceToCollectionConverter}}"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type local:Project}" ItemsSource="{Binding Systems}"> 
      <TextBlock Text="Systemes"/> 
     </HierarchicalDataTemplate> 
     <DataTemplate DataType="{x:Type local:SystemClass}" > 
      <TextBlock Text="{Binding Name}"/> 
     </DataTemplate> 
    </TreeView.Resources> 
</TreeView> 

をツリーの残りの部分について、あなたは階層を生成する必要があります:あなたは、あなたのツリービューののItemsSourceにバインドすることができるようにするだけのコレクションにあなたの単一、静的な要素を置くコンバーターを追加データのViewModel表現、またはそれを達成するために追加のコンバータを使用する。イメージとあなたのデータは本当に相関しているわけではないので、あなた自身でそれを理解しなければなりません。

+0

私に役立つ答えですコードはフランス語で書かれていて、私はその重要な細部については考えていませんでした.Systemは予約クラスです。これは私の実際のクラス名ではないので、重要なことだけを表示し、私の考えシステムを悪い名前で表現するための修正コードです。 – user3704628

関連する問題