|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Доброго времени суток. в WPF создал простой пользовательский контрол, который выглядит так: К кнопке привязал команду: Код: xml 1. 2. 3. 4. 5. 6. 7.
Экземпляры этого контрола я использую во многих местах (на скрине обведены красным цветом): Причём второй и третий экземпляры в свою очередь входят в состав др. контрола (на скрине обведён зелёным цветом). Начал писать код обработки команды (в классе моего UserControl): Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Но сразу столкнулся с проблемой: если я нажимаю на кнопку в среднем контроле (из показанных на скрине), то по факту событие срабатывает в левом - я вижу это по значению переменной name - оно всегда возвращает имя самого левого контрола из тех, что на скрине. Однако мне нужно получить именно тот мой пользовательский контрол, непосредственно в котором произошло нажатие на кнопку. Что я сделал неправильно? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:04 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Для биндинга из XAML UserControl-а на "самого себя" удобно расширение разметки вроде: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Заточено под WPF 4. Использовать как-то так: Код: xml 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:11 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Вдогонку: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:12 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Правда вопрос немного не про это, ну да ладно... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:18 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
По теме: что мешает использовать человеческий RelayCommand? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:22 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Алексей КДля биндинга из XAML UserControl-а на "самого себя" Честно говоря я не понял, как это относится к обозначенной мною проблеме. У меня ведь не с привязкой сложности возникли... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:26 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Алексей КПо теме: что мешает использовать человеческий RelayCommand? Не пробовал пока это. А что не так в том что я показал выше? Я бы хотел по возможности использовать стандартные команды. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:28 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Compositum, Я пока не вдавался глубоко. Но явно тут дело не в RelayCommand. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:30 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
CompositumЯ бы хотел по возможности использовать стандартные команды.Не тот случай. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:31 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Compositum, Есть подозрение во на что. Логика работы с событиями тут другая - не такая как в Window Forms. Посмотри в команде (в методе-обработчике) кто явлется реальным истоником события. У тебя оплучается каждый твой контрол (один и тот же) имеет обработчи события. Когда событие возникнет - оно пройдется по ним всем - если туннельное - то начнется с корневого элемента и до того элемента - котооые возбудило событие. И наоборот для пузырького события. Поэтому для начала - глянь - кто является реальным истоничк возбуждения события Тебе нужно OriginalSource глянуть. Более чем уверен что проблема именно в этом ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:35 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
unknownfromrusТебе нужно OriginalSource глянуть. Более чем уверен что проблема именно в этом Я смотрел это - указывает на Button. Но кнопка ведь определена в моём контроле, а мне получается, нужно получить имя экземпляра этого контрола, в котором и была нажата эта кнопка. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:46 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Compositum, Ну так дальше обрабатывай собятия. У тебя их будет столько - сколько объявлено контролов. Если у тебя их 10 - то 10 раз будет запущен обработчик событий. Если хочешь чтобы в самом первом обрботчике приходило именно твой контрол - то обрабатывай пузырькое событие а не туннельное (так как оно начинается на текущем эелменте и поднимается вверх) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:55 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Млин... Написал простой пример (тестовый проект), в котором хотел показать проблему... Запустил - а там всё работает как нужно... Т.е. получаю имена тех объектов, которые ожидаются в обработке (вложенный файл)... :( ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 13:59 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Заметил такой момент: если с ListBox моего UserControl есть элементы и я, прежде чем нажму кнопку, выделю элемент в списке, то возвращается правильное имя контрола. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 14:38 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Похоже на то, что работает корректно при условии, что контрол, на кнопке которого кликаю, владеет фокусом. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 14:40 |
|
Команда срабатывает не на том UserControl, который ожидался
|
|||
---|---|---|---|
#18+
Корректно работает и в том случае, если просто на заголовке списка кликнуть, прежде чем нажать кнопку. Но ведь это не дело... Я понимаю, что происходит какая-то маршрутизация снизу в верх, затем обратно, но я не понимаю, почему в этом не участвует настоящий виновник события, если он перед кликом по кнопке не был принудительно одарён фокусом? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2012, 14:48 |
|
|
start [/forum/topic.php?fid=21&msg=38058027&tid=1441586]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 466ms |
0 / 0 |