在Silverlight中删除ListItem

时间:2011-07-26 19:09:56

标签: c# silverlight

我的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);                  
                  }
           }
       }
    }

4 个答案:

答案 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);
            }
        }
    }
}

您似乎正在向上移动列表框中的所选项目。