2016-04-19 4 views
0

Ich möchte in einem TreeviewWie Sammlungen mit gleichem Typ auf derselben Ebene in TreeView WPF binden

private ObservableCollection<SectionHeader> _sections; 
public ObservableCollection<SectionHeader> Sections 
{ 
    get { return _sections ?? (_sections = new ObservableCollection<SectionHeader>()); } 
    set { _sections = value; NotifyOfPropertyChange(() => Sections); } 
} 

Hier die folgende Sammlung angezeigt ist, wie Section und verschachtelte Typen aussehen

public class SectionHeader 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 
    private ObservableCollection<SectionItem> _items; 
    public ObservableCollection<SectionItem> Items { get { return _items ?? (_items = new ObservableCollection<SectionItem>()); } } 
} 

public class SectionItem 
{ 
    public string Title { get; set; } 
    public int ID { get; set; } 


    private ObservableCollection<ProductCalculatorTemplate> _products; 
    public ObservableCollection<ProductCalculatorTemplate> Products { get { return _products ?? (_products = new ObservableCollection<ProductCalculatorTemplate>()); } } 

    private ObservableCollection<ProductCalculatorTemplate> _productsOptionTwo; 
    public ObservableCollection<ProductCalculatorTemplate> ProductsOptionTwo { get { return _productsOptionTwo ?? (_productsOptionTwo = new ObservableCollection<ProductCalculatorTemplate>()); } } 
} 

public class ProductCalculatorTemplate 
{ 
    public string Product { get; set; } 
    public double NoOfCoats { get; set; } 
    public double PackSize { get; set; } 
}  

Und hier ist, wie mein XAML-Code für TreeView wie

<TreeView ItemsSource="{Binding Sections}" Background="GhostWhite"> 
      <TreeView.Resources> 
       <HierarchicalDataTemplate DataType= "{x:Type ViewModels:SectionHeader}" ItemsSource = "{Binding Path=Items}"> 
        <StackPanel Orientation="Horizontal" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"> 
         <TextBlock Text="{Binding Name}"/> 
        </StackPanel> 
       </HierarchicalDataTemplate> 

       <HierarchicalDataTemplate DataType = "{x:Type ViewModels:SectionItem}" ItemsSource = "{Binding Path=Products}"> 
        <StackPanel Orientation="Horizontal" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"> 
         <TextBlock Text="{Binding Title}"/> 
        </StackPanel> 
        <HierarchicalDataTemplate.ItemTemplate> 
         <DataTemplate DataType = "{x:Type ViewModels:ProductCalculatorTemplate}" > 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding Product}"/> 
          </StackPanel> 
         </DataTemplate> 
        </HierarchicalDataTemplate.ItemTemplate> 
       </HierarchicalDataTemplate> 
      </TreeView.Resources> 
</TreeView> 

sieht Dies ist die Ausgabe des obigen Codes ist

enter image description here Aber ich möchte die Informationen in einer Art und Weise angezeigt werden, dass unter Fenomastic einen untergeordneten Knoten erscheint dem Namen „Option 1“, die alle prdoucts und 2. Kind von Fenomastic sollte „Option 2“ sein, die nach unten sollte Liste unten sollte Liste all ProductsOptionTwo Mitglied von SectionItem.

Antwort

1

in WPF nur die grundlegende Strukturansicht verwendet die einfachste Möglichkeit wäre, eine Options-Kollektion vorstellen, die Option 1 und Option 2 als Elemente, dh enthalten würde:

public class SectionItem 
{ 
    public string Title { get; set; } 
    public int ID { get; set; } 

    private ObservableCollection<Option> _options; 
    public ObservableCollection<Option> Options 
    { 
     get { return _options ?? (_options = new ObservableCollection<Option>()); } 
    } 
} 

public class Option 
{ 
    public string Name { get; set; } 
    public ObservableCollection<ProductCalculatorTemplate> Products 
    { 
     get { return _products ?? (_products = new ObservableCollection<ProductCalculatorTemplate>()); } 
    } 
} 

Und das Hinzufügen einer weiteren HierarchicalDataTemplate für den Option Typen

Da die TreeView ist sonst nicht geeignet für die Auflistung einer nicht variablen Menge von Eigenschaften wie Ihre ProductsOption und ProductsOptionTwo Eigenschaften sind.