Laden...

[erledigt] Das letzte Item einer Listbox verbergen

Erstellt von ErfinderDesRades vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.231 Views
ErfinderDesRades Themenstarter:in
5.299 Beiträge seit 2008
vor 13 Jahren
[erledigt] Das letzte Item einer Listbox verbergen

Hi!

ich habe eine an eine ObservableCollection gebundene Listbox, und möchte immer das letzte Item gesondert anzeigen - also es in der Listbox verbergen.

Die Items werden per DataTemplate angezeigt.

Ich hab mir schon sowas von abgebrochen mitte Triggers - kann das sein, dass die nur innerhalb von Styles funktionieren?

Der frühe Apfel fängt den Wurm.

L
862 Beiträge seit 2006
vor 13 Jahren

Der einzige Trigger der ausserhalb eines Styles funktioniert ist der EventTrigger.

Ich würde mir für deinen Fall einen StyleSelector schreiben. Innerhalb des StyleSelectors kannst du dann prüfen ob es das letzte Element ist und dort dann einen Style zuweisen bei dem Visibility auf Collapsed gesetzt wird. Das funktioniert aber nur wenn sich die Reihenfolge deiner Items nicht ändert. Der StyleSelector wird nur aufgerufen wenn ein Item hinzugefügt wird.

Wenn dynamisch Elemente zu deiner ObsCol hinzukommen würde ich entweder ein Behavior für die Liste schreiben oder CLINQ benutzen. Mit CLINQ kannst du anhand einer ObsCol wie mit LINQ ein dynamisches ResultSet-Erstellen bei dem zu z.B. sagen kannst dass das letzte Element geskippt werden soll. Dann musst du eben deiner ListBox nicht die originale ObsCol geben sondern die gefilterte CLINQ-Liste.

ErfinderDesRades Themenstarter:in
5.299 Beiträge seit 2008
vor 13 Jahren

styleselector - nie gehört - habichjetzt nachgeguckt: Ist das nicht dasselbe Prinzip wie beim Templateselector?
Wäre Templateselector nicht eine gleichwertige Alternative?

(Ich würde son Codebehind ja lieber vermeiden)

Der frühe Apfel fängt den Wurm.

L
862 Beiträge seit 2006
vor 13 Jahren

StyleSelector ist das gleiche wie ein TemplateSelector nur mit Styles statt Templates.
Den kannst du in die ListBox per ItemContainerStyleSelector einklinken. Ein StyleSelector ist hier eher angebracht als ein TemplateSelector da du nur im Style die Visibility auf Collapsed setzen kannst und dass die einfachste Möglichkeit ist dein Problem zu lösen. Natürlich kannst du auch einen TemplateSelector benutzen und beim letzten Element ein leeres Template zurückgeben.

C#-Code (in welcher Form auch immer) wirst du auf jeden Fall brauchen um dieses Problem zu lösen. Aber da du für deinen Selector sowieso eine eigene Klasse machen musst zählt das ja nicht unbedingt als CodeBehind, auch wenn ein solcher Selector wohl kaum wiederverwendbar ist.

ErfinderDesRades Themenstarter:in
5.299 Beiträge seit 2008
vor 13 Jahren
thx

Danke dir für die Klarstellung mitte Triggers - Eigentümlich: da hat jedes Element eine Triggers-Auflistung, aber funktionieren tun nur die EventTrigger (die ich noch gar nicht kenne)

Und die CLinq-Teil sieht super-interessant aus - fandich immer beschränkt, dass Linq immer nur readonly bzw. Kopie - Ergebnisse liefert.

Und neben TEmplate- und STyle-Selector kam ich grad auf eine 3.Alternative: Ich mach ein gscheites Viewmodel, das eine ObsC wrappert, und die Listen "pret-a-porter" bereitstellt - ich Depp.

Weil es geht um eine BreadCrumbBar, und da stelle ich den Baum durch eine Liste in die Tiefe dar, und für deren letztes Element eine Liste in die Breite - ich hoffe, ich drück mich verständlich aus (und sonst ist auch egal 😉 )

Der frühe Apfel fängt den Wurm.