从列表框中删除项目会导致“灾难性失败”?

3

我正在尝试清空Windows RT应用程序中列表框的项目。要添加项目,我使用以下代码:

List<string> list1;
...
foreach(string s in list1.Items)
{
    listBox1.Items.Add(s);
}

为了清除这些项目,我使用:

listBox1.Items.Clear();

然而,这会抛出以下异常:
Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))

如果我尝试使用:

        int at = 0;
        while (at < listBox1.Items.Count)
        {
            listBox1.Items.RemoveAt(at);
            at += 1;
        }

我在RemoveAt方法中遇到了相同的异常。


抱歉,List<string> 是否包含 Items 的定义? - Picrofo Software
3个回答

3
我找到了解决这个问题的方法。我试图从一个由SelectionChanged事件触发的方法中删除项目。我将它改为:
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, listBox1.Items.Clear);

它工作正常。


1

对于第二个,你真的不想增加“at”

如果你删除0号位置的项目-1号位置的项目现在将成为0号位置的项目。

所以

while (listBox1.Items.Count != 0)
{
listBox1.Items.RemoveAt(0);

}

会起作用。

不确定为什么第一个会出现异常 - 你是否在某个地方初始化了列表框?


不确定我为什么这样做。由于在InitializeComponent之后都调用了add和remove方法,因此我会认为它已经初始化了。 - msbg
1
我已经修复了,原来是因为我从listBox1.SelectionChanged使用它。 - msbg

1

如果您的列表使用DataBinding绑定了一些数据,则应该在数据模型上工作,而不是在ListItems上。

(如果您已经正确实现了INotifyPropertyChanged接口,列表将会得到更新)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接