我正在使用拖动列表框进行拖放操作,用户可以从源列表框中拖动项目并放在目标上。我正在为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>
任何想法如何访问所选项目以及如何向上/向下移动?
提前致谢
答案 0 :(得分:1)
selectedItem
变量将包含null,因为SelectedItem
属性不返回类型ListBoxItem
。 SelectedItem
属性返回从集合中提供的对象,并提供其ItemsSource
属性。
更改为: -
object selectedItem = lstmenuItems.SelectedItem;
这应该会让你更进一步。
那就是考虑将ItemsSource
绑定到ObservableCollection
并改为操纵集合。