Заполните список WPF строковым массивом - PullRequest
4 голосов
/ 29 апреля 2010

Вместо добавления каждого элемента по одному в ListBox destinationList из массива строк m_List, например:

foreach (object name in m_List)
{
    destinationList.Items.Add((string)name);
}

Есть ли лучший способ сделать это?

Я не хочу связывать данные с destinationList, поскольку хочу позже удалить некоторые записи из ListBox.

Ответы [ 4 ]

6 голосов
/ 14 июня 2011

Если вы хотите выразить это более элегантно, возможно, это сработает.

stringList.ForEach(item => listBox1.Items.Add(item));
5 голосов
/ 29 апреля 2010

НТН:

    string[] list = new string[] { "1", "2", "3" };

    ObservableCollection<string> oList;
    oList = new System.Collections.ObjectModel.ObservableCollection<string>(list);
    listBox1.DataContext = oList;

    Binding binding = new Binding();
    listBox1.SetBinding(ListBox.ItemsSourceProperty, binding);

    (listBox1.ItemsSource as ObservableCollection<string>).RemoveAt(0);

Просто используйте (ItemSource as ObservableCollection) ... для работы с элементами, а не Items.Add и т. Д.

0 голосов
/ 29 апреля 2010

Хорошо ... если привязка не вариант - и я бы, вероятно, пошел бы так, если бы это было ... тогда единственный более эффективный способ заполнить список - это сделать это параллельно.

(Чтобы это работало, я предполагаю, что у вас есть среда выполнения .Net 4 или установлены библиотеки PLinq)

Следующий код продемонстрирует значительные улучшения на многоядерном компьютере, при условии, что сбор данных будет достаточно большим, чтобы оправдать издержки начальной настройки. Так что это было бы целесообразно только для больших массивов.

Parallel.ForEach(list, r => destinationList.Items.Add(r));

Иначе я не вижу ничего плохого в вашем цикле foreach.

0 голосов
/ 29 апреля 2010

использовать OberservableCollection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...