![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| dAlex |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 3.8.2006 Где: Санкт-Петербург Репутация: нет Всего: 2 |
При изменении данных в самой программе ListBox'ы обновляются нормально (добавление item'ов). А если делать десериализацию, то данные в коллекциях появляются, а в связанных с ними листбоксах нет.
описаны так
Это сообщение отредактировал(а) dAlex - 13.5.2011, 10:27 --------------------
eof() |
||||||
|
|||||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 2 Всего: 118 |
а как вы делаете десериализацию? При ней создается новый объект, а у вас биндинг на Cc_collection остается таким какой был наверняка..
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| dAlex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 3.8.2006 Где: Санкт-Петербург Репутация: нет Всего: 2 |
у меня создается новый объект Core, в котором все хранится. Обычные переменные десереализуются на ура и в текстбоксах появляются =)
--------------------
eof() |
|||
|
||||
| dAlex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 3.8.2006 Где: Санкт-Петербург Репутация: нет Всего: 2 |
а с текстбоксами я делаю так
и все обновляется или надо после десериализации очистить листбокс и добавить туда заново все айтемы? Это сообщение отредактировал(а) dAlex - 13.5.2011, 12:44 --------------------
eof() |
|||
|
||||
| Brilona |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 8.7.2008 Репутация: 2 Всего: 3 |
Я могу ошибаться, но думаю, что нужно использовать NotifyCollectionChanged вместо NotifyPropertyChanged.
|
|||
|
||||
| dAlex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 3.8.2006 Где: Санкт-Петербург Репутация: нет Всего: 2 |
пробую =) делаю по аналогии с propertyChanged
--------------------
eof() |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
dAlex, коллекция, к которой привязываются листбоксы должна реализовывать INotifyCollectionChanged (например ObservableCollection).
|
|||
|
||||
| Brilona |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 8.7.2008 Репутация: 2 Всего: 3 |
|
|||
|
||||
| dAlex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 3.8.2006 Где: Санкт-Петербург Репутация: нет Всего: 2 |
Всё равно, изначальная коллекция также обновляется, как и было, а свойства - нет
Core._Cc_collection обновляется, Cc_collection остается пустым Это сообщение отредактировал(а) dAlex - 16.5.2011, 09:17 --------------------
eof() |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
После десериализации вызовите событие PropertyChanged для свойства "Cc_collection".
CollectionChanged используется, если меняется коллекция в существующем экземпляре коллекции. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| dAlex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 3.8.2006 Где: Санкт-Петербург Репутация: нет Всего: 2 |
это как? например, у меня есть какие-то данные, но нужно их изменить на десериализуемые, это и есть изменение коллекции в существующем экземпляре? --------------------
eof() |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Нет. Это, например, вы десериализовали (или создали) коллекцию. Затем, при нажатии на кнопку (или еще как-нить) вызываете метод Add (AddRange, Insert, Clear, Remove и т.д.) у коллекции. То есть это когда меняется существующая (уже забинденная) коллекция. Другое дело, если в какой-то момент создается новая коллекция (new) и затем присваивается свойству. В этом случае оповещение должно происходить об изменении свойства (в вашем случае Cc_collection), так как с логической точки зрения коллекция не изменялась (изменилось свойство, которое будет ссылаться на новый экземпляр).
Еще одно важное замечание: любое событие должно вызываться от имени самого объекта, а не от чужого. Биндинги следят за этим и если экземпляр не тот, то игнорируют любое событие об изменении (CollectionChanged, PropertyChanged и т.д.). В заключении, предлагаю вам новое решение: 1) Уберите все свойства типа Cc_collection (которые просто делегируют значения свойству Core). 2) Оставьте (или объявите, если еще у вас нет) только свойство Core (открытое). Если я правильно понял, то именно ему вы присваиваете результат десериализации, то есть оно у вас рутовое (если нет, поправьте). 3) В его сетере пропишите вызов события PropertyChanged - OnPropertyChanged("Core") 4) Во всех диндингах, вместо, например, ItemsSource="{Binding Cc_collection}" пишите ItemsSource="{Binding Path=Core.Cc_collection}" Что получилось теперь, после того как вы десериализуете ваш рутовый объект и присвоите его свойству Core, то автоматически вызовется событие PropertyChanged (пункт 3) и все биндинги обновятся, так как в путях биндингов будет присутствовать часть Core. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| dAlex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 3.8.2006 Где: Санкт-Петербург Репутация: нет Всего: 2 |
Сделала свойство Core, забиндила на него, прописала ему OnPropertyChanged, но все равно после десериализации пустота. Наверное, дело в
а как вызвать OnPropertyChanged от имени самого объекта? И еще - обычные переменные в текстбоксах появляются, почему? Это сообщение отредактировал(а) dAlex - 16.5.2011, 13:23 --------------------
eof() |
|||
|
||||
| -Mikle- |
|
||||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Ох... не видя кода и имея только общее представление о том что у вас, трудно даже пример привести...
Ну ок... Имеем наш объект:
Имеем виндоу:
И имеем код бехинд такой к нему:
Тут все работает как надо. Свертесь со своим кодом по этому примеру. Надеюсь, что это поможет. -------------------- Если тебе плюют в спину, значит ты впереди... |
||||||
|
|||||||
| dAlex |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 3.8.2006 Где: Санкт-Петербург Репутация: нет Всего: 2 |
хм, то есть я зря свойства все перенесла в MyRootData, надо будет исправить...
Сделала как вы сказали, наконец-то свойство Cc_collection обновляется =) но листбокс на форме почему-то все равно пустует
Это сообщение отредактировал(а) dAlex - 16.5.2011, 14:37 --------------------
eof() |
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |