![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
Я сделал собственный класс
в котором переопределил метод ToString. Затем добавляю множество объектов этого типа в ListBox. Параллельно закладываю те же объекты в массив. На экране всё отображается правильно. Далее, в процессе работы меняю message у объектов в массиве. В отладчике проверил -- члены ListBox-а тоже изменяются. Однако, визуально на экране ничего не меняется, отображается первоначальное значение. Ни Update, ни Refresh, ни Invalidate не помогают. Только перезакладываение всех элементов заново в ListBox. Что делать, как заставить ListBox переопросить ToString своих эелемнтов? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Листбокс переопрашивает список при присвоении(или изменении) значения свойства DisplayMember, его и надо переназначить
Кстати можно специальное свойство придумать, а ToString использовать по назначению. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Исправлюсь: если значением DisplayMember является имя свойства, отображаться будет значение этого свойства, в ином случае вызывается ToString. Поэтому если нужно отображать то, что выдаёт ToString, можно передавать DisplayMember даже пустую строку.
Это сообщение отредактировал(а) diadiavova - 16.10.2008, 21:54 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
Дело в том, что отображается всё правильно. Проблема в том, что не происходит обновление отображаемой информации.
Что-то я не совсем понял, что и как мне надо переопределить? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Я понимаю, что слово "переназначить" звучит непонятно. Просто свойству дисплеймембер надо вновь присвоить значение, чтобы обновился вид. Хотябы пустую строку если надо отобразить значение тустринг. Вот это нужно сделать вместо рефрешей всяких
или если надо отображать значение какого-либо свойства, то вместо пустой строки - имя свойства. Делать это надо каждый раз для обновления, даже если присваивается одно и то же значение. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
надо унаследоваться от INotifyPropertyChanged
читать тут:http://msdn.microsoft.com/en-us/library/ms743695.aspx DataMember тут при чем, но косвенно. Вы не уведомляете listbox о происходящих изменениях. ---- UPD: тока там хрнеь написана в одном месте, читать ее надо так:
это чтобы не заставлять обновлять лишний раз. --------- UPD1: еще вот это почитать для упрощеия себя жизни http://www.codeplex.com/ActiveSharp Это сообщение отредактировал(а) jonie - 17.10.2008, 00:33 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Речь не о DataMember, а о DisplayMember, я этот вариант попробовал - работает, кроме того он подходит для любых типов, а не только собственных. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
да сколько хотите. это не будет работать:
Это сообщение отредактировал(а) jonie - 17.10.2008, 00:40 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
В таком виде - да. Я говорю об этом.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
да это бред. зачем обновлять ВЕСЬ список ??
вот пример того о чем я говорил
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Я всего-навсего ответил на этот вопрос. Просто в форумах стараюсь отвечать на то, о чём меня спрашивают. Думаю пользователю Dims, дополнительная информация тоже не повредит, но я ответил только на вопрос. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Dims |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
Я понял идею. Тип Лист чувствует, что ему обновили указивку что показывать и тогда переопрашивает. Но у меня это почему-то не работает. Видимо, он сравнивает старое значение и новое и, если они совпадают, то не делает ничего. Добавлено через 3 минуты и 53 секунды А можно объяснить пошагово, что делает вот этот код?
Зачем мы заводим новую переменную типа PropertyChangedEventHandler? Нельзя было бы переписать так:
Откуда берутся эти типы? Они из стандартной библиотеки? Добавлено через 9 минут и 8 секунд И что делает вот это: PropertyChangedTmp(this, new PropertyChangedEventArgs("Str")); что такое Str? Это имя свойства? У меня не работает. Добавлено через 10 минут и 41 секунду Если у меня ToString, то что писать? |
||||||
|
|||||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
Сделал отдельное свойство, всё равно не работает.
Добавлено через 1 минуту и 41 секунду А вот это что такое: System.ComponentModel.BindingList<Class1> nl = new System.ComponentModel.BindingList<Class1>(); Я этого не делаю. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Он не то чтобы чувствует, просто тот метод, о котором был вопрос, видимо вызывается из сеттера свойства. Он не может у меня работать, а в другом месте не работать. Вариант, описанный для изменения свойства к ToString неприменим. Когда задаётся DisplayMember, у элементов ищется свойство, указанное в значении, если такого свойства нет, то вызывается функция ToString и выводится её значение. Это альтернативный вариант. В приведённом случае проблемы быть не должно, если она есть - желательно бы увидеть кусочек кода. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| jonie |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||||||||
|
|||||||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |