| 

.NET C# Java Javascript Exception

7
Hallo,

Ich habe eine Klasse, die zwei Listen enthält.
Ich möchte diese Klasse mittels HierarchicalDataTemplate in einem TreeView darstellen, dazu benötige ich MultiBinding mit einem Converter, weil die Klasse eben zwei Listen enthält und man über den Converter die Elemente der beiden Listen zusammenführen muss.

Nur leider fehlt mit dann die Hierarchische-Ebene für jede Liste, weil die Elemente zusammengeführt werden. Wenn ich den Converter so baue, dass er folgendes zurück gibt List<List<object>>, dann erhalte ich als Ausgabe im TreeView (Auflistung), weil für diese Auflistung ein Template fehlt.

Nur leider kann man nicht mehrere HierarchicalDataTemplates für einen DataType erstellen, das würde ich ja benötigen, weil ich 2 Listen innerhalb einer Klasse habe.

Als Ergebnis erhalte ich momentan folgende Struktur im TreeView:

KlasseA
- Liste1
- Liste1
- Liste2
- Liste2

Ich möchte jedoch folgende Struktur erhalten:
(für jede Liste eine zusätzliche Ebene)

KlasseA
- Liste1
--- Liste1
--- Liste1
- Liste2
--- Liste2
--- Liste2

Der XAML Code:
<Window x:Class="_13MultiBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:_13MultiBinding"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TreeView ItemsSource="{Binding}" >
<TreeView.Resources>
<local:WaldConverter x:Key="WaldConverter" />

<HierarchicalDataTemplate DataType="{x:Type local:Wald}" >
<HierarchicalDataTemplate.ItemsSource>
<MultiBinding Converter="{StaticResource WaldConverter}" >
<Binding Path="BaumListe" />
<Binding Path="TierListe" />
</MultiBinding>
</HierarchicalDataTemplate.ItemsSource>
<TextBlock Text="Wald" />
</HierarchicalDataTemplate>

<DataTemplate DataType="{x:Type local:Baum}" >
<TextBlock Text="Baum" />
</DataTemplate>

<DataTemplate DataType="{x:Type local:Tier}" >
<TextBlock Text="Tier" />
</DataTemplate>

</TreeView.Resources>
</TreeView>
</Grid>
</Window>


Die Klassen:
public class Wald
{
public string Ort { get; set; }
public int Flaeche { get; set; }
public List<Baum> BaumListe { get; set; }
public List<Tier> TierListe { get; set; }
}

public class Baum
{
public int Groesse { get; set; }
public int Alter { get; set; }
}

public class Tier
{
public int Alter { get; set; }
public string Name { get; set; }
}


Der Converter:
public class WaldConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
List<object> result = new List<object>();

foreach (var item in values)
{
if (item is IEnumerable && item != null)
{
foreach (var arrayItem in (IEnumerable)item)
result.Add(arrayItem);
}
}

return result;
}


// ----------------------------------------------------------
// Ansatz: Zweiter Converter Versuch mit einer List in List.
// Problem: Im TreeView erscheint nur: "(Auflistung)".
// ----------------------------------------------------------
/*
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
List<List<object>> result = new List<List<object>>();

foreach (var item in values)
{
if (item is IEnumerable && item != null)
{
List<object> arrayItems = new List<object>();

foreach (var aItem in (IEnumerable)item)
{
arrayItems.Add(aItem);
}

result.Add(arrayItems);
}
}

return result;
}
*/

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}


Kennt jemand diese Problematik und hat eine Lösung?
News:
12.12.2011
scoda 61 1 1 3
Auf die Beantwortung dieser Frage war ein Kopfgeld in Höhe von 100 Reputationspunkten ausgesetzt. Das Kopfgeld wurde bereits vergeben.
1 Antwort
1
Sieh dir mal den Codeplex Artikel Complex Hierarchical Data Templates an.

Eine weitere Lösung zu den Problem hatte ich schon mal gefunden, jedoch verlegt. Wenn ich sie wieder finde editiere ich diese Antwort.
21.12.2011
me 1,1k 2 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH