4

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

listBox.Items.Remove(stackPanelName);

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

有谁知道我做错了什么?

4

2 回答 2

1

你可以这样做:

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);
}
于 2013-08-03T17:56:55.063 回答
1

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

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

于 2013-08-03T18:06:24.827 回答