由于您已通过使用 ItemsSource 绑定到 ObservableCollection 来填充列表框,因此您无法修改列表框的 Items 属性。
ItemsSource 只能在 Items 集合为空时设置,Items 只有在 ItemsSource 为空时才能修改。
否则您将收到错误“在使用 ItemsSource 时操作无效...”
您需要做的是修改底层集合,因为它是一个 ObservableCollection,所以 ListBox 将反映所做的更改。
以下代码显示了如何通过交换集合中的项目来上下移动项目。
相应的 XAML 只包含一个名为 lbItems 的列表框和 2 个连接事件处理程序的按钮。
public partial class MainWindow : Window
{
private ObservableCollection<string> ListItems = new ObservableCollection<string>
{
"Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6"
};
public MainWindow()
{
InitializeComponent();
lbItems.ItemsSource = this.ListItems;
}
private void up_click(object sender, RoutedEventArgs e)
{
var selectedIndex = this.lbItems.SelectedIndex;
if (selectedIndex > 0)
{
var itemToMoveUp = this.ListItems[selectedIndex];
this.ListItems.RemoveAt(selectedIndex);
this.ListItems.Insert(selectedIndex - 1, itemToMoveUp);
this.lbItems.SelectedIndex = selectedIndex - 1;
}
}
private void down_click(object sender, RoutedEventArgs e)
{
var selectedIndex = this.lbItems.SelectedIndex;
if (selectedIndex + 1 < this.ListItems.Count)
{
var itemToMoveDown = this.ListItems[selectedIndex];
this.ListItems.RemoveAt(selectedIndex);
this.ListItems.Insert(selectedIndex + 1, itemToMoveDown);
this.lbItems.SelectedIndex = selectedIndex + 1;
}
}
}