Ein Element in einem WPF-Listenfeld nach oben und unten verschieben

7

Ich habe ein Listenfeld mit einer Reihe von Werten darin. Ich habe auch eine UP-Taste und eine DOWN-Taste. Mit diesen Buttons möchte ich das ausgewählte Objekt im Listenfeld nach oben / unten verschieben. Ich habe Probleme damit.

Hier ist mein Code so weit:

%Vor%

Ich weiß nicht, wie ich die Werte vertauschen soll! Jede Hilfe wäre sehr geschätzt!

    
DommyCastles 22.09.2012, 03:34
quelle

7 Antworten

20

Da Sie das Listenfeld durch Bindung an eine ObservableCollection mit ItemsSource gefüllt haben, können Sie die Items-Eigenschaft des Listenfelds nicht ändern.

ItemsSource kann nur festgelegt werden, wenn die Items-Auflistung leer ist und Items nur geändert werden können, wenn ItemsSource null ist.

Andernfalls erhalten Sie den Fehler "Operation ist nicht gültig, während ItemsSource verwendet wird ..."

Was Sie tun müssen, ist die zugrunde liegende Sammlung zu ändern, und da es sich um eine ObservableCollection handelt, spiegelt die ListBox die Änderungen wider.

Der folgende Code zeigt, wie Sie ein Element nach oben oder nach unten verschieben können, indem Sie das Objekt in der Sammlung austauschen.

Das entsprechende XAML enthält nur eine Listbox namens lbItems und zwei Buttons, die die Eventhandler verbinden.

%Vor%     
Peter Hansen 22.09.2012, 10:08
quelle
5

Ich mache einige Erweiterungsmethoden dafür:

%Vor%

Es ist nicht notwendig, die ListBox dafür zu kennen.

    
MysticEmpires 24.01.2014 10:09
quelle
4

Dies ist der einfachste Weg dies zu tun und es werden alle richtigen Ereignisse ausgelöst, so dass Sie sich nicht um XAML kümmern müssen. ObservableCollection hat eine schöne Methode namens

%Vor%

Vorausgesetzt, Sie haben eine ObservableCollection namens DataItemList

%Vor%

Für Down erhalten Sie den Index des vorhergehenden Elements.

Einfach so!

    
MangoCrysis 25.01.2013 21:00
quelle
3

Ich hätte einen Kommentar hinzugefügt, aber ich kann nicht, da ich nur 3 Reputation habe: /

Peter Hansens Lösung ist großartig, aber wenn es kein ausgewähltes Element gibt, wirft down_click eine ArgumentOutOfRange Exception. Wenn kein Element ausgewählt ist, ist der Index gleich -1.

Ich würde down_click wie folgt bearbeiten:

%Vor%     
Vereos 27.09.2013 06:58
quelle
1

versuche das:

%Vor%     
HasanAboShally 22.09.2012 04:06
quelle
1
%Vor%     
HasanAboShally 22.09.2012 04:25
quelle
0

Sie können so etwas versuchen:

Zum Hochziehen:

%Vor%

Für die Abwärtsbewegung:

%Vor%     
HasanAboShally 22.09.2012 03:45
quelle

Tags und Links