可以';t从C#中的ListBox中按名称删除StackPanel

本文关键字:StackPanel 删除 ListBox 中的 可以 | 更新日期: 2023-09-27 18:26:29

我正试图使用以下代码从ListBox中删除一个项目:

listBox.Items.Remove(stackPanelName);

我没有得到任何错误,但也没有得到任何可见的结果。

有人知道我做错了什么吗?

可以';t从C#中的ListBox中按名称删除StackPanel

您可以这样做:

var stackPanelItem = listBox.Items.OfType<FrameworkElement>()
                            .First(x => x.Name == stackPanelName);
listBox.Items.Remove(stackPanelItem);

如果listBox.Items集合中没有具有该名称的项,则此操作将失败。你可能想这样做更安全一点:

var stackPanelItem = listBox.Items.OfType<FrameworkElement>()
                            .FirstOrDefault(x => x.Name == stackPanelName);
if (stackPanelItem != null)
{
    listBox.Items.Remove(stackPanelItem);
}

我不建议尝试直接从ListBox中删除项(我很惊讶没有抛出错误,因为listBox.Items返回只读集合,所以不可能对其调用Remove,除非我弄错了)。无论哪种方式,您都应该专注于管理备份集合。

例如,如果您将项目存储在ObservableCollection中,它将自动通知UI(在本例中为ListBox)项目已删除,并为您更新UI。这是因为ObservableCollection在默认情况下实现INotifyPropertyChangedINotifyCollectionChanged接口,因此当集合中的某些内容发生更改时,它会触发一个事件,告诉UI控件进行更新。