0

Ich versuche HierarchicalDataTemplate für die self referencing table in Silverlight 4.HierarchicalDataTemplate für selbstverweisenden Tabelle

enter image description here

Es alle Elemente in der Strukturansicht wie 1-Ebene zeigt zu implementieren anstelle der hierarchischen Ansicht. Es sollte 3 Ebenen der Gegenstände sein.

enter image description here

So habe ich fest, wie es zu tun ... Jeder Hinweis? Vielen Dank!

<UserControl x:Class="TreeViewCRUD.MainPage" 
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"    
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:Crud="clr-namespace:TreeViewCRUD" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid> 
      <sdk:TreeView Height="403" Margin="0,0,0,0" Name="TreeView1" Background="Beige" > 
     <sdk:TreeView.ItemTemplate> 
      <sdk:HierarchicalDataTemplate ItemsSource="{Binding Divisions}" > 
       <TextBlock Text="{Binding Name, Mode=OneWay}" Margin="5,0"></TextBlock> 
      </sdk:HierarchicalDataTemplate>     
     </sdk:TreeView.ItemTemplate> 
    </sdk:TreeView> 
    </Grid> 
</UserControl> 

und C#

void client_GetDivisionsCompleted(object sender, MyService.GetDivisionsCompletedEventArgs e) 
     { 
      var lst = e.Result; 
      try 
      { 
       TreeView1.DataContext = lst; 
       // TreeView1.ItemsSource = lst; 
       TreeView1.ItemsSource = lst.Where(a=>a.DivisionID != null); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message.ToString()); 
       MessageBox.Show(ex.StackTrace.ToString()); 
      } 
     } 
+1

Wo genau stecken Sie fest? Was ist das erwartete Verhalten und wie unterscheidet sich das aktuelle Verhalten davon? – cadrell0

+0

@ cadrell0 Es zeigt für mich alle Elemente in der TreeView wie 1 Ebene anstelle der hierarchischen Ansicht. Es sollte 3 Ebenen der Gegenstände sein. –

+0

@ cadrell0 Ich habe gerade meine Frage aktualisiert, bitte sehen Sie. –

Antwort

1

Ich vermute, dass XAML korrekt ist (meistens) und die Daten sind das Problem. Ich gehe davon aus lst einige Daten enthält wie

ID DivisionID Divisions1 
1  null  (List<Division>) 
2  1   (List<Division>) 
3  2   (List<Division>) 

Wenn das, was Sie wirklich brauchen lst

ID DivisionID Divisions1 
1  null  (List<Division>) 

Jetzt ist zu sein lst [0] .Divisions1

ID DivisionID Divisions1 
2  1   (List<Division>) 

wäre Und schließlich lst [ 0] .Divisions1 [0] .Divisions1 wäre

ID DivisionID Divisions1 
3  2   (List<Division>) 

Überprüfen Sie, ob die Daten von WCF mit intakten Navigationseigenschaften kommen. Auch wenn lst alle 3 Elemente statt nur die oberste Ebene zeigt, sollten Sie in der Lage sein, die Clientseite nach unten zu filtern.

Das letzte, was mir aufgefallen ist, dass Sie ItemsSource="{Binding Divisions}" für Ihre Bindung verwenden. In dem Klassendiagramm ist der Name der Eigenschaft jedoch Divisions1

+0

Danke für die Eingabe! Tatsächlich habe ich unter WCF folgendes: return db.Divisions.ToList(); Also nichts besonderes dort. Könntest du vorschlagen, wenn ich Divisions Tabelle in eine Zwischenliste oder ... umwandeln muss? Wenn ja, wie könnte es gemacht werden? Meinst du, unter WCF muss ich die Struktur bauen, die du vorschlägst? –

+0

Nun, ich fand die Lösung auf der Ebene der RIA Services http://StackOverflow.com/Questions/9929050/Recursive-Select-VIA-Linq Das letzte, was ist sdk: HierarchicalDataTemplate –