Déplacer un élément vers le haut et vers le bas dans un WPF zone de liste
J'ai une zone de liste avec un tas de valeurs. J'ai aussi un bouton et un bouton BAS.
Avec ces boutons, je voudrais déplacer l'élément sélectionné dans la zone de liste vers le haut/vers le bas. J'ai de la difficulté à faire cela.
Voici mon code pour l'instant:
private void btnDataUp_Click(object sender, RoutedEventArgs e)
{
int selectedIndex = listBoxDatasetValues.SelectedIndex; //get the selected item in the data list
if (selectedIndex != -1 && selectedIndex != 0) //if the selected item is selected and not at the top of the list
{
//swap items here
listBoxDatasetValues.SelectedIndex = selectedIndex - 1; //keep the item selected
}
}
Je ne sais pas comment permuter les valeurs! Toute aide serait GRANDEMENT appréciée!
OriginalL'auteur DommyCastles | 2012-09-22
Vous devez vous connecter pour publier un commentaire.
Puisque vous avez rempli la listbox en se liant à une ObservableCollection à l'aide de ItemsSource, vous ne pouvez pas modifier la propriété des Éléments de la listbox.
ItemsSource peut être sélectionnée que lorsque les Éléments de la collection est vide, et les Articles peuvent être modifiés uniquement lorsque ItemsSource est null.
Sinon vous obtenez le message d'erreur "l'Opération n'est pas valide alors que ItemsSource est en cours d'utilisation..."
Ce que vous avez à faire, c'est modifier la collection sous-jacente, et parce que c'est une ObservableCollection, la zone de liste reflète les modifications.
Le code suivant montre comment vous pouvez déplacer un élément vers le haut et vers le bas par le remplacement de l'élément dans la collection.
Le correspondant XAML contient simplement une listbox appelé lbItems et de 2 boutons permettant de raccorder les gestionnaires d'événements.
OriginalL'auteur Peter Hansen
Je fais une extension des méthodes pour cela:
Il n'est pas nécessaire de connaître la zone de liste pour cette.
OriginalL'auteur MysticEmpires
C'est la meilleure façon de le faire et ça tire de tous les événements de sorte que vous n'avez pas à vous soucier de XAML. ObservableCollection a une belle méthode appelée
Étant donné que vous avez une ObservableCollection nommé DataItemList
Pour vous obtenir l'index de l'élément précédent.
Simple que cela!
OriginalL'auteur MangoCrysis
J'aurais ajouté un commentaire, mais je ne peux pas puisque je n'ai que 3 réputation :/
Peter Hansen solution est très bien, mais si il n'y a pas un élément sélectionné, down_click jette un ArgumentOutOfRange Exception. C'est parce que si il n'y a aucun élément sélectionné, l'Indice est égal à -1.
J'avais modifier down_click comme ceci:
OriginalL'auteur Vereos
essayez ceci:
Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead.
en ligne:else{ listBoxDatasetValues.Items.Remove(selected);
hhhh désolé mais je suis un peu endormi en ce moment.. les 2 seules façons que je peux penser à est de dupliquer l'élément et de la rajouter dans la liste, puis en supprimant les "anciens", ou à la recherche d'un usercontrol listbox qui prend en charge le déplacement des articles 🙂
Ok merci pour votre aide! Pourriez-vous me montrer comment dupliquer et ajouter de nouveau et de supprimer l'ancien? s'il vous plaît?
de vérifier la nouvelle réponse pls 🙂
OriginalL'auteur HasanAboShally
Non, c'états
AddItem
,ListIndex
etRemoveItem
n'étaient pas valides. 🙁désolé bro.. l'utilisation
listBoxDatasetValues.Items.Add()
,listBoxDatasetValues.SelectedIndex
,listBoxDatasetValues.Items.Remove()
Ce sujet pour
listBoxDatasetValues.Text
? Il indique la méthodeAdd
nécessite seulement 1 paramètre.J'ai essayé de cette façon et il me donne le même
Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead
erreur 🙁OriginalL'auteur HasanAboShally
Vous pouvez essayer quelque chose comme ceci:
De déplacement vers le HAUT:
Pour le déplacement vers le Bas:
Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead.
des suggestions? Je suis à l'aide de la liaison dans ma liste, est-ce un problème?il semble ItemsSource est en cours d'utilisation grâce à la liaison.. dans la ligne u ne reçois le message d'erreur ?
J'obtiens l'erreur sur la ligne:
listBoxDatasetValues.Items[listBoxDatasetValues.SelectedIndex] = select;
Dans mon XAML, mon
ItemSource
pour monListBox
estItemsSource="{Binding Source={StaticResource datasetWizardViewModel}, Path=ListBoxDataTypes}"/>
qui est l'endroit où il est en tirant les données pour remplir la zone de liste.OriginalL'auteur HasanAboShally