无法从C#中的ListBox中按名称删除StackPanel

时间:2013-08-03 17:55:20

标签: c# windows-phone-7 windows-phone-8 listbox

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

listBox.Items.Remove(stackPanelName);

我没有收到任何错误,但我也没有得到任何明显的结果。

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

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

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