由于您使用ItemsSource将ObservableCollection绑定到列表框,因此无法修改列表框的Items属性。
只有在Items集合为空时才能设置ItemsSource,而只有在ItemsSource为null时才能修改Items。
否则,您将收到“在使用ItemsSource时无效的操作…”的错误。
您需要做的是修改基础集合,因为它是一个ObservableCollection,所以ListBox将反映这些更改。
以下代码显示了如何通过交换集合中的项目来将项目上移和下移。
相应的XAML仅包含名为lbItems的列表框和两个按钮,这些按钮连接事件处理程序。
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;
}
}
}