Hallo Leute,
ich steh mal wieder vorm Wald, den ich nicht sehe. Vielleicht habt ihr mal wieder einen kleinen Hinweis, der bei mir den Stein zum Rollen bringen kann.
ich habe eine Klasse, die ich in einer Collection an eine ListView gebe und die Daten daran binde. Kein Problem soweit. Hier erstelle ich einfach ein DataTemplate und lasse mir die Daten so anzeigen, wie ich das möchte.
Nun habe ich aber verschiedene Gruppen von Daten, die sich anhand anderer Eigenschaften etwas unterscheiden, aber vom Typ her identisch sind. Ich möchte die speziellen Eigenschaften anders gruppieren und dynamisch anzeigen, deshalb habe ich eine Klasse geschrieben, die nun die Collection enthält und hierzu auch noch weitere Eigenschaften (zB einen Header). Nun möchte ich diese Daten an ein ListView binden. Was auch tadellos klappt. Wenn ich nun aber versuche, die Daten der eingebetteten Collection anzeigen zu lassen, komme ich nicht weiter, weil ich an die Datenbindung irgendwie nicht herankomme. Zumindest tut sich hier nichts.
folgendes habe ich:
Die ListView bekommt vom ProgramMangerView die Collection, die es anzeigen soll. In dieser sind alle Elemente vom Typ "ExpanderApp" gespeichert als Collection (soweit so gut).
Die Klasse ExpanderApp sieht (erstmal) wie folgt aus:
Nichts ungewöhnliches. Enthält (derzeit) nur die Header-Information sowie die Collection der "ManagedApp".
Der Expander wird mir auch richtig angezeigt, nur ist sein Inhalt leer. Eine Fehlermeldung bzgl. des DataBindings erhalte ich auch nicht und die View als ItemSource ist auch richtig angegeben, da mir VS auch diese als Vorschlag gibt. Den DataContext habe ich extra gesetzt, aber auch ohne gibt es keinen Unterschied.
Wie gesagt, wenn ich auf die ManagedApp Collection einfach so referenziere, erhalte ich alles, was ich brauche. Wenn ich auf die ExpanderApp-Collection referenziere, erhalte ich auch hier alles notwendige. Also war mein Gedanke, dass ich ja in den Expander einfach eine weitere ListView packen kann, die auf alle Elemente des Expanders verweist und für diese ListVie ein DataTemplate erstellen kann. Aber irgendwie führt das nicht zum Ziel. Und entweder habe ich etwas übersehen oder diese Möglichkeit ist nicht so einfach wie ich mir das vorgestellt hatte.
Ja, ich weiß auch, dass man eine Gruppierung über die ListView machen kann, somit wäre Header überflüssig in einer eigenen Klasse und es könnte in die ManagedApp mit hinein, sodass ich nach diesem Kriterien filtern oder gruppieren könnte. Aber so einfach ist das bei meinen Anforderungen nicht, da hier noch einige Variablen hinzukommen und sich damit das Verhalten ändern wird. Aber vielleicht habt ihr ja wieder einen kleinen Wink mit einem großen Zaunpfahl, was vielleicht falsch oder besser sein könnte
Anbei die Bilder: Der Expander, der irgendwie keinen Inhalt hat und die Auflistung, wie die ManagedApp zB aussehen könnte:
ich steh mal wieder vorm Wald, den ich nicht sehe. Vielleicht habt ihr mal wieder einen kleinen Hinweis, der bei mir den Stein zum Rollen bringen kann.
ich habe eine Klasse, die ich in einer Collection an eine ListView gebe und die Daten daran binde. Kein Problem soweit. Hier erstelle ich einfach ein DataTemplate und lasse mir die Daten so anzeigen, wie ich das möchte.
Nun habe ich aber verschiedene Gruppen von Daten, die sich anhand anderer Eigenschaften etwas unterscheiden, aber vom Typ her identisch sind. Ich möchte die speziellen Eigenschaften anders gruppieren und dynamisch anzeigen, deshalb habe ich eine Klasse geschrieben, die nun die Collection enthält und hierzu auch noch weitere Eigenschaften (zB einen Header). Nun möchte ich diese Daten an ein ListView binden. Was auch tadellos klappt. Wenn ich nun aber versuche, die Daten der eingebetteten Collection anzeigen zu lassen, komme ich nicht weiter, weil ich an die Datenbindung irgendwie nicht herankomme. Zumindest tut sich hier nichts.
folgendes habe ich:
XML-Quellcode
- <ListView Grid.Row="1" DataContext="{StaticResource ViewProgramManager}" ItemsSource="{Binding ProgramManagerView }" IsSynchronizedWithCurrentItem="True">
- <ListView.ItemTemplate>
- <DataTemplate>
- <Expander Header="{Binding Header}">
- <ListView ItemsSource="{Binding RelativeSource={RelativeSource Mode=Self}, Path=View}" Height="200" DataContext="{Binding RelativeSource={RelativeSource Mode=Self}, Path=View}">
- <ListView.ItemTemplate>
- <DataTemplate>
- <StackPanel>
- <TextBlock Text="{Binding Description}"/>
- <TextBlock Text="{Binding Header}"/>
- </StackPanel>
- </DataTemplate>
- </ListView.ItemTemplate>
- </ListView>
- </Expander>
- </DataTemplate>
- </ListView.ItemTemplate>
- </ListView>
Die ListView bekommt vom ProgramMangerView die Collection, die es anzeigen soll. In dieser sind alle Elemente vom Typ "ExpanderApp" gespeichert als Collection (soweit so gut).
Die Klasse ExpanderApp sieht (erstmal) wie folgt aus:
C#-Quellcode
- private string _header;
- public string Header { get { return _header; } set { SetField(ref _header, value); } }
- private ManagedAppCollection _managedCollection;
- public ManagedAppCollection ManagedCollection { get { return _managedCollection; } private set { SetField(ref _managedCollection, value); } }
- private ListCollectionView _view;
- public ListCollectionView View { get { return _view; } private set { SetField(ref _view, value); } }
- public ExpanderApp()
- {
- }
- public ExpanderApp(string header)
- {
- _header = header;
- _managedCollection = new ManagedAppCollection();
- _view = new ListCollectionView(_managedCollection);
- }
Nichts ungewöhnliches. Enthält (derzeit) nur die Header-Information sowie die Collection der "ManagedApp".
Der Expander wird mir auch richtig angezeigt, nur ist sein Inhalt leer. Eine Fehlermeldung bzgl. des DataBindings erhalte ich auch nicht und die View als ItemSource ist auch richtig angegeben, da mir VS auch diese als Vorschlag gibt. Den DataContext habe ich extra gesetzt, aber auch ohne gibt es keinen Unterschied.
Wie gesagt, wenn ich auf die ManagedApp Collection einfach so referenziere, erhalte ich alles, was ich brauche. Wenn ich auf die ExpanderApp-Collection referenziere, erhalte ich auch hier alles notwendige. Also war mein Gedanke, dass ich ja in den Expander einfach eine weitere ListView packen kann, die auf alle Elemente des Expanders verweist und für diese ListVie ein DataTemplate erstellen kann. Aber irgendwie führt das nicht zum Ziel. Und entweder habe ich etwas übersehen oder diese Möglichkeit ist nicht so einfach wie ich mir das vorgestellt hatte.
Ja, ich weiß auch, dass man eine Gruppierung über die ListView machen kann, somit wäre Header überflüssig in einer eigenen Klasse und es könnte in die ManagedApp mit hinein, sodass ich nach diesem Kriterien filtern oder gruppieren könnte. Aber so einfach ist das bei meinen Anforderungen nicht, da hier noch einige Variablen hinzukommen und sich damit das Verhalten ändern wird. Aber vielleicht habt ihr ja wieder einen kleinen Wink mit einem großen Zaunpfahl, was vielleicht falsch oder besser sein könnte
Anbei die Bilder: Der Expander, der irgendwie keinen Inhalt hat und die Auflistung, wie die ManagedApp zB aussehen könnte: