2010-09-17 10 views
1

J'utilise des listes de sélection pour glisser-déposer où l'utilisateur peut faire glisser des éléments de la liste source et les déposer sur la cible. J'utilise un DataTemplate pour les ListBoxItems de mes contrôles ListBox.Silverlight 4 et SelectedItem de LisBox lors de l'utilisation de DataTemplate en tant que ItemTemplate

Je dois donner à l'utilisateur la possibilité de monter/descendre des éléments dans la liste de cibles après qu'ils aient été déplacés de la source. J'ai deux boutons "Move Up" & "Move Down" pour le faire, mais lorsque l'utilisateur clique sur l'un des boutons, il me renvoie l'objet nul en tant qu'élément sélectionné.

ici est mon code

private void moveUp_Click(object sender, RoutedEventArgs e) 
    { 
     ListBoxItem selectedItem = lstmenuItems.SelectedItem as ListBoxItem; 

     if (selectedItem != null) 
     { 
     int index = lstmenuItems.Items.IndexOf(selectedItem); 


      if (index != 0) 
      { 
       lstmenuItems.Items.RemoveAt(index); 
       index -= 1; 
       lstmenuItems.Items.Insert(index, selectedItem); 
       lstmenuItems.SelectedIndex = index; 
      } 

     } 

    } 

Je suis sûr que son à voir avec le ItemTemplate. voici le XAML pour listbox

<ListBox x:Name="lstmenuItems" Height="300" MinWidth="200" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
        <StackPanel Orientation="Vertical"> 
         <TextBlock Text="{Binding Code}"/> 
         <TextBlock Text="{Binding RetailPrice, StringFormat=£\{0:n\}}" /> 
        </StackPanel> 
      <!-- Product Title--> 
      <TextBlock Text="{Binding Description1}" Width="100" Margin="2" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 

Toutes les idées comment puis-je accéder à l'élément sélectionné et comment puis-je déplacer vers le haut/bas?

Merci à l'avance

Répondre

1

La variable selectedItem contiendra une valeur nulle parce que la propriété SelectedItem ne retourne pas le type ListBoxItem. La propriété SelectedItem renvoie un objet reçu de la collection et fournit sa propriété ItemsSource.

Modification: -

object selectedItem = lstmenuItems.SelectedItem; 

et que vous devriez un peu plus loin. Ceci dit, considérons avoir ItemsSource lié à un ObservableCollection et manipuler la collection à la place.

+0

Je l'ai lié à ObeservableCollection mais le problème est qu'il n'est pas trié. Donc, ce que je veux, c'est aller à travers les collections à l'événement de baisse et le trier par l'utilisateur de la commande a chuté dans les listes. – Jhelumi

+1

@Jhelumi: Si vous manipulez ObservableCollection (plutôt que ListBox qui y est lié), le contrôle ListBox doit changer pour refléter les changements dans la collection. – AnthonyWJones