2010-12-30 2 views
1

У меня есть команда, которую я хотел бы включить, только если у определенного элемента управления есть фокус. Я могу сделать это с помощью переназначенной команды и привязки команд, но я хотел бы сохранить реализацию в моей ViewModel.WPF и MVVM: включить команду только тогда, когда текстовое поле имеет фокус с реализацией в ViewModel?

Является ли привязка команды и обработчиком событий в коде, который является единственным способом?

ответ

2

Чтобы обработать это в ViewModel, вам нужно будет добавить концепцию «определенного элемента управления» с фокусом в вашу модель представления, позволяя команде, когда это состояние фокусировки изменяется. Вы можете сделать это, добавив логическое свойство IsCertainControlFocussed к вашей модели просмотра.

Чтобы обновить это состояние, у вас есть два варианта: либо обрабатывать события GotFocus, либо LostFocus в коде, который находится за вами, и установить это свойство boolean в вашей модели представления. Или используйте один из механизмов отклонения структуры MVVM. Например, среда MVVM Light имеет поведение EventToCommand, которое позволяет связать событие с командой, открытой вашей моделью просмотра, которая может установить это свойство.

http://geekswithblogs.net/lbugnion/archive/2009/11/05/mvvm-light-toolkit-v3-alpha-2-eventtocommand-behavior.aspx

Какой метод вы используете, зависит от того, насколько важно для вас иметь никакого кода-позади. Лично я не следую этому религиозно, пока Модель Представления имеет правильные обязанности, и ее можно проверить, немного ее кода не вредит!