|
Более двух команд на контрол - как?
|
|||
---|---|---|---|
#18+
WPF, MVVM. На самом деле у меня несколько вопросов. 1. Во-первых, по какому событию запускается команда на, скажем, кнопке? Когды я пишу обработчики событий, то могу сам выбрать события и какой код в них писать. А команда просто привязывается к кнопке и всё. Как и когда она должна выполниться - кто знает. 2. Ну, допустим я выяснил, что по клику команда срабатывает. А может, я хочу, чтобы команды выполнилась при проведении мышью над кнопкой (OnMouseOver или что-то такое)? Что тогда делать? 3. Я захотел большего - хочу по правому клику одну команду, а по левому - другую. Что делать? Я читал, что можно в code behind обработать события и вызывать в них нужные команды. Но это какой-то грязный хак MVVM. Есть способы поприличнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2013, 15:26 |
|
Более двух команд на контрол - как?
|
|||
---|---|---|---|
#18+
user7320WPF, MVVM. На самом деле у меня несколько вопросов. 1. Во-первых, по какому событию запускается команда на, скажем, кнопке? Когды я пишу обработчики событий, то могу сам выбрать события и какой код в них писать. А команда просто привязывается к кнопке и всё. Как и когда она должна выполниться - кто знает.У всех контролов по разному. Надо смотреть мануал по контролу исходники рефлектором. user73202. Ну, допустим я выяснил, что по клику команда срабатывает. А может, я хочу, чтобы команды выполнилась при проведении мышью над кнопкой (OnMouseOver или что-то такое)? Что тогда делать?MVVM Event To Command => google. Вот одно из решений через Expression Blend SDK. user73203. Я захотел большего - хочу по правому клику одну команду, а по левому - другую. Что делать?Там EventArgs может передаваться как parameter в ICommand, если хочешь разную реакцию на одно событие. user7320Я читал, что можно в code behind обработать события и вызывать в них нужные команды. Но это какой-то грязный хак MVVM. Есть способы поприличнее?Тут надо определиться, что хочется именно этого. А то может оказаться, что тупо подписаться на событие проще. У обоих подходов есть свои плюсы и минусы. Не надо с фанатизмом подгонять всё под MVVM. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2013, 15:54 |
|
Более двух команд на контрол - как?
|
|||
---|---|---|---|
#18+
Алексей К, Я тут нагуглил про разные поведения (behaviors: 1 , 2 ). Они, судя по вашей ссылке , похожи на ваши Event To Command. Может, это одно и то же? Вообще, я хочу, чтобы по разным событиям на одном и том же контроле выполнялись разные команды. Этакий байндинг команд к событиям. Я тут также поискал и нашёл всякие реализации, которые все роднят некоторые вещи: 1) все они основаны на DependencyProperty, 2) во всех них упоминаются поведения (behaviors), 3) все они достаточно стары (самое новое, что нашёл - 2010 год). Например, вот такое . Там можно передавать на каждое событие свою команду и свой параметр для этой команды. Этакий мультикомманд байндинг. Не могли бы вы посмотреть и сказать, какой вариант лучше - ваш через Event To Command (я так понимаю, это и есть поведения в Expression Blend SDK), или приведённый мной пример через написание специального прикреплённого свойства? В принципе, мне даже кажется, что подходы где-то одинаковые. И ещё скажите, пожалуйста, этот Expression Blend SDK - это что-то официальное, как .NET Framework, или слабопротестировання написанная кем-то библиотека? Почему это не входит в основной фреймворк? С Prism, кстати, аналогичная ситуация - там много полезных штук, но в основной фреймворк их библиотеки не входят. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2013, 16:31 |
|
Более двух команд на контрол - как?
|
|||
---|---|---|---|
#18+
user7320 Тут пример того что я предлагал. Код: xml 1. 2. 3. 4. 5. 6.
Решение нормальное, меня устраивает. зы: InvokeCommandAction - это аналог моего класса, на который я дал ссылку ранее. Вроде как он есть "в коробке", но в другой сборке. Не хотел её тащить в проект ради одного класса. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2013, 17:02 |
|
|
start [/forum/topic.php?fid=21&msg=38331558&tid=1441341]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 139ms |
0 / 0 |