![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Freak_FB |
|
|||
![]() Ктулхувед ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 13.10.2006 Репутация: 1 Всего: 4 |
Пытаюсь освоить Data Binding в .NET. Написал код по статье с RSDN, где попытался привязать свойства объекта к визуальным элементам отображения (в частности, к TextBox).
Вот мой код формы (C# 2.0):
Хочу при нажатии на первую кнопку показать ISBN, на вторую кнопку - изменить его на произвольное значение. Хочется, чтобы при изменении поля объекта сразу же обновлялся элемент отображения (как и подразумевается в статье, и как, думается мне, работает Data Binding). Но он, почему-то, не меняется. То есть, при изменении TextBox, при событии OnValidate, соответствующее поле объекта изменяется, а вот наоборот - нет. Подскажите, что я не так делаю. |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
У вас работает так называемая односторонняя привязка (OneWay Binding) (это когда элемент может воздействовать на переданную в биндинге ссылку на объект).
Подумайте сами: как текстовое поле узнает что кто-то что-то поменял в объекте? Ответ - никак (если не брать в учет всякие там AOP (аспектно-ориентированное программирование) -- пока не думайте об этом). Так вот, чтобы сделать это самое уведомление, ваш объект и текст бокс должны реализовать паттерн Observer (слушатель) [подробнее] В рамках .NET это делается через имплементацию слушаемым объектом INotifyPropertyChanged интерфейса, который содержит только один event - public PropertyChanged. Как его реализовать можено посмотреть тут: http://msdn.microsoft.com/en-us/library/ms229614.aspx Самый главный смысл - вызывать событие, на которое кстати подпишется текстбокс, при set поля в обекте:
Замечу, что данный подход действует и для коллекций объектов, с той лишь разницей, что там надо реализовать INotifyCollectionChanged... фуф... многа букаф в общем 8) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Freak_FB |
|
|||
![]() Ктулхувед ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 13.10.2006 Репутация: 1 Всего: 4 |
Спасибо, новые материалы помогли делу.
Про INotifyPropertyChanged я читал, но не понял сразу, куда его прикручивать. Сейчас всё стало понятно. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [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. |