Silverlight 4 и SelectedItem LisBox при использовании DataTemplate в качестве ItemTemplate - PullRequest
1 голос
/ 17 сентября 2010

Я использую буксирные списки для перетаскивания, где пользователь может перетаскивать элементы из исходного списка и перетаскивать на цель. Я использую DataTemplate для ListBoxItems моих элементов управления ListBox.

Мне нужно дать пользователю возможность перемещать элементы вверх / вниз в целевом списке после их перемещения из источника. У меня есть две кнопки «Вверх» и «Вниз», но когда пользователь нажимает на одну из кнопок, он возвращает мне нулевой объект как selectedItem.

вот мой код

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;
            }

        }

    } 

Я уверен, что это связано с ItemTemplate. вот xaml для списка

 <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>

Есть идеи, как получить доступ к выбранному элементу и как его переместить вверх / вниз?

Заранее спасибо

1 Ответ

1 голос
/ 17 сентября 2010

Переменная selectedItem будет содержать ноль, поскольку свойство SelectedItem не возвращает тип ListBoxItem. Свойство SelectedItem возвращает объект, полученный из коллекции, и предоставляет свойство ItemsSource.

Изменить на: -

object selectedItem = lstmenuItems.SelectedItem;

и это должно немного продвинуть вас.

Тем не менее, рассмотрите возможность привязки ItemsSource к ObservableCollection и вместо этого манипулируйте коллекцией.

...