Это справедливый вопрос, и один, что является общим, но «решить» (спорным) проблема в MVVM архитектуры области. Если вы используете инфраструктуру MVVM, вы, вероятно, найдете что-то похожее на поведение EventToCommand, здесь - это образец из легкого инструментария MVVM.
Короче говоря, это позволяет вам сопоставить событие с привязкой команды следующим образом:
<Rectangle Fill="White"
Stroke="Black"
Width="200"
Height="100">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<cmd:EventToCommand Command="{Binding TestCommand,
Mode=OneWay}"
CommandParameter="{Binding Text,
ElementName=MyTextBox,
Mode=OneWay}"
MustToggleIsEnabledValue="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Rectangle>
Обновление:
Есть два других «разумных» решения этой проблемы:
Один использует уже рассмотренное устаревшее расширение «AttachedCommandBehavior», найденное здесь.
Другой немного раздражает, но выполнимо.
- Захват команды через en
Событие чисто в поле зрения.
- Запрос источника данных элемента управления Шаг
- Захватите цель привязки строки
идентификатор, который обозначает вашу команду
(возможно, используя константную строку на
вид)
- Вызвать вашу команду на
модель представления через отражение и
передать аргументы команды.
Это выглядит грубо, но я уверен, что на самом деле это немного быстрее, чем просто использование традиционной команды
привязок. Чтобы быть уверенным, мне нужно увидеть ИЛ, и я не думаю, что это имеет значение в этом случае.
/ Update
Хочу отметить, однако, что это не всегда идеальная ситуация. Я обнаружил, что чаще всего я использую EventToCommand для решения проблемы дизайна. Пожалуйста, примите во внимание следующее:
- Использование событий и кода для обработки поведения, связанного с пользовательским интерфейсом.
- Рассмотрите возможность создания пользовательских элементов управления, которые имеют привязки команд, если это уместно, особенно если вы обнаружите, что используете команды для инкапсуляции событийно-ориентированного поведения для установки связанных данных, которые затем отражаются в представлении. (т.е. установка значения прозрачности на основе близости к элементу управления или чего-либо подобного)
- EventToCommand, скорее всего, следует использовать для обработки только «командных» событий (двойной щелчок и т. Д.), А не реактивных событий (при наведении курсора мыши). Однако ничто не мешает этому. Реализуйте, как считаете нужным.
Возможно, самое главное, что вы помните, что вы разработчик. Сами по себе руководящие принципы не решают проблемы, но рассмотрение руководящих принципов может сделать решение проблемы очевидным.