Обновление списка () в c # - PullRequest
       21

Обновление списка () в c #

9 голосов
/ 28 февраля 2011
int[] arr = int[100];
listBox1.DataSource = arr;
void ComboBox1SelectedIndexChanged(object sender, EventArgs e)
{
    .....//some processes
    listBox1.DataSource = null;
    listBox1.DataSource = arr;
}

is not working,

также

listBox1.Refresh(); is not working,

также

listBox1.Update(); is not working,


я знаю, что могу использовать BindingList<T>, но мне нужно работать только с массивом.

Можете ли вы помочь мне, как я могу обновить список?

Ответы [ 10 ]

11 голосов
/ 23 августа 2013

мой первый ответ об обмене стека здесь.

C # .Net 4.0:

listBox1.DataSource = null;
listBox1.DataSource = names;

Я заметил, что при установке источника данных в первый раз он обновляется.Когда он установлен, и вы пытаетесь установить его снова на тот же, он не обновляется.

Итак, я установил нулевое значение, установил тот же, и он правильно отображался для меня с этой проблемой.

3 голосов
/ 04 июля 2014

ListBox обновляет свое отображаемое содержимое только тогда, когда объект, связанный с источником данных, уведомляет о своих собственных изменениях. у объекта BindingSource есть событие DataSourceChanged. при изменении источника на другой объект список будет обновляться сам. То же самое, когда вы связываете список. Ничего не произойдет, если вы измените список, потому что список не уведомляет, что он был изменен. Существует простое решение этой проблемы: используйте BindingList http://msdn.microsoft.com/de-de/library/ms132679%28v=vs.110%29.aspx

BindingList имеет событие ListChanged, которое вызывается каждый раз, когда список изменяется (очевидно). Поэтому DataBindings объектов Windows.Form используют такие события, как ListChanged, для обновления. Простой список не поддерживает это событие.

ТАК, если вы хотите работать с большим количеством привязок данных, о которых вы должны знать: http://msdn.microsoft.com/de-de/library/system.componentmodel.inotifypropertychanged%28v=vs.110%29.aspx

3 голосов
/ 09 февраля 2012

удалось сделать только с

FirstListBox.DataContext = null;
FirstListBox.DataContext = App.ViewModel;

Просто теряет ссылку и возвращает все данные.

1 голос
/ 17 октября 2013

Возможно, проблема связана с ListBox SelectionMode.

По неизвестной мне причине привязка данных не работает, когда SelectionMode имеет значение SelectionMode.None.

Обходной путь может быть:

listBox.SelectionMode = SelectionMode.MultiExtended;
listBox.DataSource = myDatasource;
listBox.SelectionMode = SelectionMode.None;

Надеюсь, это поможет.

1 голос
/ 27 апреля 2012

Я унаследовал ListBox и добавил открытый метод, вызывающий RefreshItems(), который делает то, что мы хотим.Уже реализовано и все.Я не знаю, почему они не использовали публичный метод.

1 голос
/ 26 июня 2011

ну, без привязки я справился только с:

this.Hide();
this.Show();

он перерисовывает все ...

1 голос
/ 28 февраля 2011

Эти ссылки могут помочь.

Как я могу обновить элемент списка (C #)? - http://arstechnica.com/civis/viewtopic.php?f=20&t=554717

Привязать ArrayList к ListBox - http://www.java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/BindArrayListtoListBox.htm

1 голос
/ 28 февраля 2011

попробуйте следующее

listBox1.DataBind()
0 голосов
/ 27 марта 2014

Формы Windows, чтобы увидеть изменения, особенно в Listbox и других элементах управления, до окончания загрузки сложно.Чтобы увидеть данные как загруженные, используйте invalidate ();затем Update ();

0 голосов
/ 28 февраля 2011

Используйте BeginUpdate и EndUpdate, которые должны это решить. Нет необходимости устанавливать источник данных дважды

listBox1.BeginUpdate();

listBox1.DataSource = myList;

listBox1.EndUpdate();
...