将DataTemplate用作ItemTemplate时,Silverlight 4和LisBox的SelectedItem

时间:2010-09-17 09:09:47

标签: silverlight silverlight-4.0 listbox itemtemplate

我正在使用拖动列表框进行拖放操作,用户可以从源列表框中拖动项目并放在目标上。我正在为ListBox控件的ListBoxItem使用DataTemplate。

我需要让用户能够在从源移动后将目标列表框中的项目向上/向下移动。我有两个按钮“Move Up”& “向下移动”是为了做到这一点,但是当用户点击其中一个按钮时,它会将null对象作为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 个答案:

答案 0 :(得分:1)

selectedItem变量将包含null,因为SelectedItem属性不返回类型ListBoxItemSelectedItem属性返回从集合中提供的对象,并提供其ItemsSource属性。

更改为: -

object selectedItem = lstmenuItems.SelectedItem;

这应该会让你更进一步。

那就是考虑将ItemsSource绑定到ObservableCollection并改为操纵集合。