2013-12-22 2 views
1

У меня есть ListBox, который я добавляю в различной сумме StackPanel s, однако мне нужны эти предметы, чтобы появиться в обратном порядке в ListBox.ListBox.Items.Reverse(), похоже, не работает?

Я попытался с помощью:

listBox.Items.Insert(0, stackPanel); 

Однако это, кажется, работает только при добавлении 1 StackPanel к ListBox. Когда я добавляю больше одного, я получаю сообщение об ошибке invalid parameter.

Поэтому я прибегли к:

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

Однако использование .Reverse(); не кажется, обратный порядок ListBox?

Я также попытался добавить StackPanels в List<StackPanel> list = new List<StackPanel>() и использовать list.Reverse();, однако это, похоже, не отменяет элементы?

Кто-нибудь знает, почему предметы не будут отменены?

ответ

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; 
} 
+0

Единственная проблема заключается в том, что каждый stackPanel создается из-за каталога и файлов в IsolStorage, поэтому я не знаю, сколько из них будет. Я использую foreach() для получения информации и применяю к stackPanel, который добавляется в listBox. – user2696648

+0

и просто для выяснения проблемы с 'listBox.Items.Insert (0, stackPanel)' не то, что он не может добавить более одного элемента за раз, но если я использую эту команду более одного раза, она вызывает ошибку который указан выше – user2696648

+0

@ user2696648 Когда вы пытаетесь добавить вторую стек стек, это новый экземпляр или нет? Также, как именно вы пытаетесь «добавить более одного предмета за раз»? Как выглядит вызов? –

Смежные вопросы