|
События, контролы, обработчики...
|
|||
---|---|---|---|
#18+
Здесь будет длинный пост о событиях и контролах, и в начале будет сильно объемное описание одного очень простого примера, поэтому лучше наверно сразу смотреть третий абзац снизу, начинающийся на "Вопрос: ...". Была задача контрол с гридом (RadGridView), который ведет себя определенным образом: Есть список элементов - имя и булево значение. Нужно редактировать только значение. При нажатии на CheckBox значения - вывести ChildWindow для редактирования этого значения. При нажатии в ChildWindow на "ОК" - сохранить изменение, иначе - отменить. Сначала взять грид, затем определить для него колонку с CheckBox, на CheckBox навешать обработчик (события checked/unchecked), который обрабатывает клики. Затем определить класс данных. Затем возникает проблема №1: При установке источника данных для грида свойства IsChecked некоторых CheckBox устанавливаются в "true" - это приводит к поднятию события Checked для каждого из них. Т.е. в моем случае это два открытых ChildWindow при старте. Решил следующим образом: Отвязал обработчики для checked/unchecked из замла и прописал их в коде при загрузке грида: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
При клике на CheckBox его значение меняется, но по требованиям - не должно. Решил следующим образом: Вручную отписаться от события, сменить значение на требуемое, подписаться заново. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
При сохранении значения поднимаются события checked/unchecked и ChildWindow редактирования выводится заново. Третью проблему решать не стал, но знаю как ее решить. Применены telerik-компоненты для приближения примера к реальной ситуации. Обработка исключений намеренно пустая. Код: https://skydrive.live.com/redir?resid=720EBE42733ED7E3!123&authkey=!AIbFgF2ep2OLak0 Вопрос: как избавиться от этой катавасии с событиями? Это упрощенный пример реальной ситуации, где нужно было сделать подобный функционал в сжатый срок. Результат был получен, он удовлетворял требованиям, но его реализация мне не понравилась. Хотелось бы провести работу над ошибками. В общем, в начале написания этого кода, казалось, что реализация позже, используя MVVM, решит этот бардак. Но потом стало ясно, что события генерируемые контролами никуда не денутся и придется решать эти же проблемы, только во ViewModel, где завязок на View быть не должно. В чем моя проблема? Как бы решали это Вы? С одной стороны - можно написать быдлокод один раз и забыть и забить. С другой стороны - если кому-нибудь или Вам однажды придется разбираться в нем - это очень плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2012, 14:51 |
|
События, контролы, обработчики...
|
|||
---|---|---|---|
#18+
Зачем эти мультики? Добавь button вместо CheckBox c привязкой к нужной команде. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2012, 17:42 |
|
События, контролы, обработчики...
|
|||
---|---|---|---|
#18+
Кстати, вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2012, 06:04 |
|
События, контролы, обработчики...
|
|||
---|---|---|---|
#18+
enigmatic, Но простой батон не подойдет, нужен с визуальным стилем чекбокса плюс возможность выставить IsChecked только программно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2012, 06:23 |
|
События, контролы, обработчики...
|
|||
---|---|---|---|
#18+
enigmaticenigmatic, Но простой батон не подойдет, нужен с визуальным стилем чекбокса плюс возможность выставить IsChecked только программно. По сути это никакой checkbox, а нарисовать галку при нажатии можно даже на заборе. ЗЫ Идиотские хотелки нужно посылать в сад ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2012, 09:35 |
|
События, контролы, обработчики...
|
|||
---|---|---|---|
#18+
SeVaЗЫ Идиотские хотелки нужно посылать в сад=) Ситуация такова: сначала была сделана методика тестирования для пользователей, затем реализация. Тех, кто делал методику, я в глаза не видел. Если реализация будет отличаться от методики, то тест, возможно, будет не пройден. Пришел запрос сделать так и так, нужно было делать именно так. Задача была выполнена точно и в срок. :) ЗЫ. Полностью с Вами согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2012, 10:00 |
|
События, контролы, обработчики...
|
|||
---|---|---|---|
#18+
enigmaticSeVaЗЫ Идиотские хотелки нужно посылать в сад=) Ситуация такова: сначала была сделана методика тестирования для пользователей, затем реализация. Тех, кто делал методику, я в глаза не видел. Если реализация будет отличаться от методики, то тест, возможно, будет не пройден. Пришел запрос сделать так и так, нужно было делать именно так. Задача была выполнена точно и в срок. :) ЗЫ. Полностью с Вами согласен. Проще просто переопределить стили для кнопки, те кто будет тестировать даже не заметят ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2012, 10:18 |
|
События, контролы, обработчики...
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2012, 11:20 |
|
|
start [/forum/topic.php?fid=21&fpage=36&tid=1441631]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 34ms |
total: | 179ms |
0 / 0 |