【问题标题】:Removing an item from a list without removing it from its datasource - c#从列表中删除项目而不将其从其数据源中删除 - c#
【发布时间】:2025-12-22 23:40:06
【问题描述】:

我试图在拖放后从列表框中删除一个项目,但是当我这样做时,我收到一条消息说我无法修改列表框,因为它与数据源链接。

问题是我只想从 listBox 的视图中删除该项目,同时将其保留在数据源中。

这是我尝试做的:

int indexSelec = listBox3.SelectedIndex;

listBox3.Items.Remove(listBox3.Items[indexSelec]);

有人有解决办法吗?

谢谢

【问题讨论】:

    标签: c# listbox datasource


    【解决方案1】:

    您应该将列表框项目存储到列表,然后使用该列表在列表框中添加或删除项目。这是一个例子:

    首先添加一个新列表:List<string> _items = new List<string>();

    现在将项目添加到列表并显示在列表框上:

    _items.Add("One");
    _items.Add("Two");
    _items.Add("Three");
    listBox1.DataSource = _items; //this will display added items to  List Box
    

    将项目添加到列表框:

    _items.Add("New Item " + DateTime.Now.Second);
    listBox1.DataSource = null;
    listBox1.DataSource = _items; 
    

    从列表框中删除项目:

    int selectedIndex = listBox1.SelectedIndex;
    try
    {
        _items.RemoveAt(selectedIndex);
    }
    catch
    {
    }
    listBox1.DataSource = null;
    listBox1.DataSource = _items;
    

    【讨论】:

      【解决方案2】:

      您不能从ListBox 中删除ListBoxItem,因为它是ReadOnlyCollection 的一部分。

      但是你可以设置它的Visibility

      ListBoxItem c = (ListBoxItem) ListBox1.ItemContainerGenerator.ContainerFromItem(ListBox1.Items[0]);
      
      c.Visibility = System.Windows.Visibility.Collapsed;
      

      【讨论】: