Laden...

WPF TreeView an eigene Objekte binden - HierarchicalDataTemplate ?!

Erstellt von ErikM vor 11 Jahren Letzter Beitrag vor 11 Jahren 10.531 Views
E
ErikM Themenstarter:in
39 Beiträge seit 2011
vor 11 Jahren
WPF TreeView an eigene Objekte binden - HierarchicalDataTemplate ?!

Ich habe in meinem Programm eine Liste mit "Category"-Objekten, jedes "Category"-Object enthält eine weitere Liste mit "Product"-Objekten.. Diese wollte ich in einem TreeView anzeigen lassen.. Quasi erst die Kategorien und wenn man die dann anklickt die jeweiligen Produkte..

Ich habe jetzt folgenden Quelltext..

 
<TreeView Height="300"  Width="500" Margin="0,20,0,0" x:Name="TreeView" ContextMenu="{StaticResource Popup}" ItemsSource="{Binding Categories}">
                       
                      
<TreeView.ItemTemplate>
                           
    <HierarchicalDataTemplate ItemsSource="{ Binding Products}">

        <TextBlock Text="{Binding ProductTitle}" />
                            
    </HierarchicalDataTemplate>
</TreeView.ItemTemplate>
                           

                          
</TreeView>

Es werden jetzt nur Produkte angezeigt, der Kategorietitel jedoch nicht..
Weiss jemand, wie ich den gegebenen Quelltext anpassen must, damit das passiert X(

Mit freundlichen Grüßen

5.658 Beiträge seit 2006
vor 11 Jahren

Es werden jetzt nur Produkte angezeigt, der Kategorietitel jedoch nicht..

Ich kann nicht erkennen, wo du den Kategorietitel ausgibst.

Weeks of programming can save you hours of planning

E
ErikM Themenstarter:in
39 Beiträge seit 2011
vor 11 Jahren

genau..

mir ist irgendwie noch nicht ganz klar an welcher Stelle ich den Kategorietitel ausgeben muss, denn
wenn ich beispielsweise


<TreeView.ItemTemplate>
      <TextBlock Text="{Binding CategoryName}" />
      <HierarchicalDataTemplate ItemsSource="{ Binding Products}">

         <TextBlock Text="{Binding ProductTitle}" />

     </HierarchicalDataTemplate>
 </TreeView.ItemTemplate>


kriege ich einen Fehler --> sinngemäß "Die Item-Auflistung muss vor dem ersten Aufruf leer sein"

MfG l'Erik

5.658 Beiträge seit 2006
vor 11 Jahren

Meiner Meinung nach müßte es so in etwa aussehen:


  <Grid>
    <Grid.Resources>
      <HierarchicalDataTemplate DataType="{x:Type Category}" ItemsSource="{Binding Products}">
         <TextBlock Text="{Binding CategoryName}" />
      </HierarchicalDataTemplate>      
     <HierarchicalDataTemplate DataType="{x:Type Product}" >
        <TextBlock Text="{Binding ProductTitle}" />
    </HierarchicalDataTemplate>
  </Grid.Resources>
  <TreeView Height="300"  Width="500" Margin="0,20,0,0" x:Name="TreeView" ContextMenu="{StaticResource Popup}" ItemsSource="{Binding Categories}">
</Grid>

Christian

Weeks of programming can save you hours of planning

E
ErikM Themenstarter:in
39 Beiträge seit 2011
vor 11 Jahren

Danke für die Antwort ! 👍
Ich habe es jetzt so gemacht.. .


      <TreeView ItemsSource="{Binding Shops}" Margin="10" Height="200">
            <TreeView.Resources>
                <HierarchicalDataTemplate DataType="{x:Type TreeViewBindings:Shop}" ItemsSource="{Binding Categories}">
                    <StackPanel>
                        <TextBlock Text="{Binding Path=Shopname}" />
                    </StackPanel>
                </HierarchicalDataTemplate>
                <HierarchicalDataTemplate DataType="{x:Type TreeViewBindings:Category}" ItemsSource="{Binding Products}">
                    <StackPanel>
                        <TextBlock Text="{Binding Path=CategoryName}" />
                    </StackPanel>
                </HierarchicalDataTemplate>
                <HierarchicalDataTemplate DataType="{x:Type TreeViewBindings:Product}" ItemsSource="{Binding Products}">
                    <StackPanel>
                        <TextBlock Text="{Binding Path=Title}" />
                    </StackPanel>
                </HierarchicalDataTemplate>
            </TreeView.Resources>
        </TreeView>


Die Ausgabe ist in etwa :

  • Shop1
    ------Category1
    --------------------Product1
    --------------------Product2
    --------------------Product2
    ------+Category2
    -Shop2
    ------+Category1
    ------+Category2

quasi genau das, was ich wollte :3

MfG
E.