TreeView mit Databinding

  • WPF

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    TreeView mit Databinding

    Hallo Zusammen,
    ich versuche seit mehren Stunden eine TreeView dazu zu bringen meine wenigen DB-Daten (Entity Data Model) anzuzeigen!
    Scheinbar bin ich zu beschränkt.
    Fehlerbild:

    Das TreeviewControl zeigt das Rootverzeichnis richtig an! Aber die "Kinder" werden nicht dargestellt.

    Sondern es werden, abhängig von der Länge des Tabelleninhalts, nur leere Zeilen eingefügt!

    Also Textlänge vom Child = 3 dann im Tree 3Zeilen (siehe Anhang "Treeview_Fehler").

    Nachstehen noch mehr Informationen (falls erforderlich).

    Was mache ich falsch oder geht das so ganz anders?

    Danke

    Gruß

    Mark






    1. Meine Datenbank Tabellen.

    siehe Anhang: DatenbankTabellen.jpg

    2. Mein XAML:

    XML-Quellcode

    1. <TreeView Name="TreeView1" Margin="5">
    2. <TreeView.ItemTemplate>
    3. <HierarchicalDataTemplate ItemsSource="{Binding Path=Child.Child_Parameter_1}">
    4. <TextBlock Text="{Binding Path=Rootname}"/>
    5. </HierarchicalDataTemplate>
    6. </TreeView.ItemTemplate></TreeView>

    VB.NET-Quellcode

    1. Public Class Controller
    2. Private Shared _CurrentContext As Database1Entities1
    3. Public Shared ReadOnly Property CurrentContext() As Database1Entities1
    4. Get
    5. If _CurrentContext Is Nothing Then
    6. _CurrentContext = New Database1Entities1
    7. End If
    8. Return (_CurrentContext)
    9. End GetEnd PropertyEnd Class
    10.  
    11.  
    12. Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
    13. Dim myQuriy = From q In Controller.CurrentContext.ParantsSelect q
    14. TreeView1.ItemsSource = myQuriy.ToList()End Sub
    Bilder
    • DatenbankTabellen.jpg

      54,26 kB, 387×448, 224 mal angesehen
    • Treeview_Fehler.jpg

      26,18 kB, 273×346, 228 mal angesehen
    Hallo SeriTools,

    habe eine englische Version von VB. Wäre das dann das Output Window?

    Da steht aber leider nichts. Die Anzahl der Zeilen im TreeView ändert sich ja auch abhängig von der Textlänge in der Tabellenzelle. Somit, habe ich gedacht wäre das Binding ok.

    Gruß

    Mark

    P.S: Meine Schreibfehler versuche ich zu verringern!
    Das Problem ist recht klar. Du hast das Prinzip des Templates nicht ganz verstanden. Du hast nur ein Template für das Rootelement wo dann der Rootname dargestellt wird. Jedoch hast du bei deinem Child kein Member namens Rootname.
    Nen Beispiel wie man dein Problem lösen könnte gibt es hier: msdn.microsoft.com/en-us/library/dd759035(v=vs.95).aspx
    Wenn man das Teil auf deine Verhältnisse anpasst würde das z.B. so aussehen:

    XML-Quellcode

    1. <StackPanel x:Name="LayoutRoot" Background="White">
    2. <StackPanel.Resources>
    3. <HierarchicalDataTemplate x:Key="ChildTemplate" >
    4. <TextBlock Text="{Binding}" />
    5. </HierarchicalDataTemplate>
    6. <HierarchicalDataTemplate x:Key="RootTemplate"
    7. ItemsSource="{Binding Path=ChildTopics}"
    8. ItemTemplate="{StaticResource ChildTemplate}">
    9. <TextBlock FontStyle="Bold" Text="{Binding Path=Rootname}"/>
    10. </HierarchicalDataTemplate>
    11. </StackPanel.Resources>
    12. <TreeView Width="400" Height="300" ItemsSource="{Binding}"
    13. ItemTemplate="{StaticResource RootTemplate}" x:Name="myTreeView" />
    14. </StackPanel>


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Hallo thefiloe,
    danke für deine Mühen. Du hast wohl Recht das ich das Prinzip nicht verstanden habe.
    Habe mir ein Buch gekauft, wo das nicht eingängig erklärt wird.
    Werde deinen Code mal ausprobieren und versuchen zu lernen!
    Danke
    Gruß
    Mark
    Eigentlich sollte man es mit Datentyp usw. machen das stimmt. Jedoch ist das genau das was er braucht und von der Syntax müsste stimmen, da es im Prinzip von msdn kommt(nur Namen geändert).


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    jo - ich habs nur in dieser Form - mit benamten Templates noch nie gesehen.

    ich hab immer die Templates in die Resourcen, und die wenden sich dann selber an, wenn ein Item ihres Typs darzustellen ist.

    thefiloe schrieb:

    da es im Prinzip von msdn kommt
    na, das ist ja wohl eher eine Warnung als ein Hinweis auf gute Code-Qualität ;)