Добрый день.
Столкнулся с такой проблемой:
Есть класс Test
public class Test
{
public string str;
public Test(){}
public override string ToString()
{
return str;
}
}
В классе формы создаю один(!!!) объект этого класса.
private Test test = new Test();
Добавляю в два ListBox'a
test.str = "Test";
listBox1.Items.Add(t);
listBox2.Items.Add(t);
Как и ожидалось, в обоих отобразилось "Test".
Далее меняю test.str
test.str = "SuperTest";
но в ListBox'ах все-равно отображается "Test"
Подскажите, в чем проблема?
Проверял:
Object.ReferenceEquals(test, listBox1.Items[0]) == true;
MessageBox.Show(listBox1.Items[0].ToString());
Выводит "SuperTest", а в ListBox'ах "Test"
Спасибо.
Здравствуйте, A_Sorokin, Вы писали:
A_S>Добрый день.
A_S>Столкнулся с такой проблемой:
A_S>Есть класс Test
A_S>public class Test
A_S>{
A_S> public string str;
A_S> public Test(){}
A_S> public override string ToString()
A_S> {
A_S> return str;
A_S> }
A_S>}
A_S>В классе формы создаю один(!!!) объект этого класса.
A_S>private Test test = new Test();
A_S>Добавляю в два ListBox'a
A_S>test.str = "Test";
A_S>listBox1.Items.Add(t);
A_S>listBox2.Items.Add(t);
A_S>Как и ожидалось, в обоих отобразилось "Test".
A_S>Далее меняю test.str
A_S>test.str = "SuperTest";
A_S>но в ListBox'ах все-равно отображается "Test"
A_S>Подскажите, в чем проблема?
A_S>Проверял:
A_S>Object.ReferenceEquals(test, listBox1.Items[0]) == true;
A_S>MessageBox.Show(listBox1.Items[0].ToString());
A_S>Выводит "SuperTest", а в ListBox'ах "Test"
A_S>Спасибо.
ИМХО, дело в том, что лист не знает об изменениях. А так как этот клас юзает API ф-ии, то значения, которые ты занес до изменения, закешировались в листе. Как вариант можно добавлять данные не через Items, а через DataSource. Когда что-то поменяешь, получи BindingContext от DataSource, откасть к CurrencyManager и скажи ему Refresh.
Если не подходит — то пиши так
test.str = "SuperTest";
listBox1.Items[listBox1.Items.IndexOf( test )] = test;