Hallo, alle zusammen ;)
Ich habe folgende Struktur:
public class Root
{
public List<Child1> Children;
}
public class Child1
{
public List<Child2> Children2;
public string Name { get; }
}
public class Child2
{
public List<Child3> Children3;
public int Average { get; }
}
public class Child3
{
public int Count { get; }
public int Number { get; }
}
So, meine Aufgabe ist es jetzt, diese Datenstruktur in einem Silverlight-Usercontrol darzustellen. Ursprünglich wollte ich TreeView aus dem Silverlight-Toolkit verwenden, bloß habe ich bisher keine Beispiele für die Verwendung von verschiedenen Klassen in einem TreeView gefunden. Kennt ihr vielleicht einige Seiten, die sowas sehr gut rüber bringen? Bei meiner Suche habe ich nur Beispiele gefunden, die eine Klasse durchgehend verwenden. Meistens benannt als TreeNode.
Ich hoffe, ihr könnt mir weiterhelfen. Ich hab jedenfalls nicht ordentliches gefunden :oops:
Gruß, Tejio
[Silverlight / C#] TreeView mit verschiedenen Kindklassen
- dowhilefor
- Moderator
- Beiträge: 173
- Registriert: 27.02.2009, 15:44
- Alter Benutzername: 6SidedDice
- Echter Name: Nico Probst
- Wohnort: Bochum
- Kontaktdaten:
Re: [Silverlight / C#] TreeView mit verschiedenen Kindklasse
Endlich mal ne Frage wo ich vielleicht helfen kann :)
Also die einfachste und schnellste lösung ist es, für jeden deiner Klassentypen ein Template anzulegen. Allerdings statt DataTemplate, ein sogenanntes HierarchicalDataTemplate.
Diesem Template kann man zusätzlich wieder eine ItemsSource geben.
Nehmen wir mal an wir hätten diese 3 Unterschiedlichen Klassen.
Und erzeugen tun wir das ganze so:
erstellen unsere Treeview
dann brauchen wir nur noch folgende HierarchicalDataTemplates zu definieren.
Und können damit das aussehen direkt für jede der Klassen einzeln festlegen.
Hoffe das hilft dir etwas weiter :)
Also die einfachste und schnellste lösung ist es, für jeden deiner Klassentypen ein Template anzulegen. Allerdings statt DataTemplate, ein sogenanntes HierarchicalDataTemplate.
Diesem Template kann man zusätzlich wieder eine ItemsSource geben.
Nehmen wir mal an wir hätten diese 3 Unterschiedlichen Klassen.
Code: Alles auswählen
class Drive
{
public Drive()
{
Folders = new ObservableCollection<Folder>();
}
public string DriveName { get; set; }
public ObservableCollection<Folder> Folders { get; set; }
}
class Folder
{
public Folder()
{
Files = new ObservableCollection<File>();
}
public string FolderName { get; set; }
public ObservableCollection<File> Files { get; set; }
}
class File
{
public string FileName { get; set; }
}
Code: Alles auswählen
List<Drive> drives = new List<Drive>();
drives.Add(new Drive() {DriveName = "C:\\"});
drives.Add(new Drive() {DriveName = "D:\\"});
drives.Add(new Drive() {DriveName = "E:\\"});
drives[0].Folders.Add(new Folder() {FolderName = "Windows"});
drives[0].Folders[0].Files.Add(new File() { FileName = "Test.txt" });
DataContext = drives;
Code: Alles auswählen
<TreeView>
<TreeViewItem Header="System" ItemsSource="{Binding}"/>
</TreeView>
Code: Alles auswählen
<!-- Drives -->
<HierarchicalDataTemplate DataType="{x:Type local:Drive}" ItemsSource="{Binding Folders}">
<TextBlock Text="{Binding DriveName}"/>
</HierarchicalDataTemplate>
<!-- Folder -->
<HierarchicalDataTemplate DataType="{x:Type local:Folder}" ItemsSource="{Binding Files}">
<TextBlock Text="{Binding FolderName}"/>
</HierarchicalDataTemplate>
<!-- File -->
<DataTemplate DataType="{x:Type local:File}">
<TextBlock Text="{Binding FileName}"/>
</DataTemplate>
Hoffe das hilft dir etwas weiter :)
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss