ListBox.Items.Reverse()似乎不起作用?

时间:2013-12-22 20:04:56

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

我有一个ListBox我正在添加不同数量的StackPanel,但我需要这些项目在ListBox中以相反的顺序显示。

我尝试过使用:

listBox.Items.Insert(0, stackPanel);

但是,这似乎仅在向StackPanel添加1 ListBox时才有效。当我添加多个时,我收到的错误是invalid parameter

所以我采取了:

listBox.Items.Add(stackPanel);
listBox.Items.Reverse();

但是,使用.Reverse();似乎不会颠倒ListBox的顺序?

我还尝试将StackPanels添加到List<StackPanel> list = new List<StackPanel>()并使用了list.Reverse();,但这似乎也没有撤消项目?

有谁知道为什么这些物品不会倒转?

1 个答案:

答案 0 :(得分:2)

Reverse方法实际上是来自Linq的扩展方法。它实际上并不修改原始集合,而是以相反的顺序返回一组表示原始集合的新项目。

您可以使用Insert一次只添加一个项目,但只需多次调用即可添加多个项目:

listBox.Items.Insert(0, stackPanel1);
listBox.Items.Insert(0, stackPanel2); // inserts stackPanel2 before stackPanel1
listBox.Items.Insert(0, stackPanel3); // inserts stackPanel3 before stackPanel2

或者,如果可能,只需按相反的顺序添加它们:

listBox.Items.Add(stackPanel3);
listBox.Items.Add(stackPanel2);
listBox.Items.Add(stackPanel1);

您可能还会在添加项目后尝试撤消项目,例如:

for (int i = 0; i < listBox.Items.Count / 2; i++)
{
    var tmp = listBox.Items[i];
    listBox.Items[i] = listBox.Items[listBox.Items.Count - i - 1];
    listBox.Items[listBox.Items.Count - i - 1] = tmp;
}