我的Silverlight项目中有一个ListBox。并且,何时从ListBox中删除并添加ListItem,我收到以下错误。
Operation not supported on read-only collection.
代码:
public void btnUp_Click(object sender, RoutedEventArgs e)
{
if (lbChoices.SelectedItem != null)
{
ListBoxItem selectedItem = new ListBoxItem();
selectedItem.Content = lbChoices.SelectedItem;
selectedItem.IsSelected = true;
int selectedIndex = lbChoices.SelectedIndex;
if (lbChoices.Items.Count > 1)
{
if (selectedIndex > 0)
{
lbChoices.Items.Remove(lbChoices.SelectedItem);
lbChoices.Items.Insert(selectedIndex - 1, selectedItem);
}
}
}
}
答案 0 :(得分:1)
将ItemsControl与ItemsSource一起使用时,无法使用Items集合添加/删除元素。您应该改为修改基础集合。
“问题源于这样一个事实:我将ListBox绑定到ObservableCollection,一旦绑定,Items集合就变为只读。”
答案 1 :(得分:1)
我猜您是通过绑定ItemsSource添加项目的?如果是,请从您要绑定的集合中删除该项目。
答案 2 :(得分:1)
您需要从ListBox
绑定的来源中移除该项目,而不是ListBox
本身。只要您从源中删除它,ListBox
将自动刷新以不显示该项目。
答案 3 :(得分:0)
更改您的代码:
private void button1_Click(object sender, RoutedEventArgs e)
{
if (lbChoices.SelectedItem != null)
{
ListBoxItem selectedItem = (ListBoxItem)lbChoices.SelectedItem;
int selectedIndex = lbChoices.SelectedIndex;
if (lbChoices.Items.Count > 1)
{
if (selectedIndex > 0)
{
lbChoices.Items.Remove(lbChoices.SelectedItem);
lbChoices.Items.Insert(selectedIndex - 1, selectedItem);
}
}
}
}
您似乎正在向上移动列表框中的所选项目。