在silverlight中移除listtitem

本文关键字:listtitem silverlight | 更新日期: 2023-09-27 18:03:41

我有一个列表框在我的Silverlight项目。并且,当从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);                  
                  }
           }
       }
    }

在silverlight中移除listtitem

当您使用ItemsControl和ItemsSource时,您不能使用Items集合添加/删除元素。您应该修改您的底层集合。

"这个问题源于我将ListBox绑定到一个ObservableCollection,一旦绑定,Items集合就变成了只读。"

我猜你通过绑定ItemsSource来添加项目?如果是,从要绑定到的集合中删除项。

您需要从源中删除您的ListBox绑定到的项目,而不是ListBox本身。一旦您从源中删除它,ListBox将自动刷新以不显示该项目。

像这样修改代码:

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

看起来您正在向上移动列表框中的选定项