WPF и MVVM: Включить команду только тогда, когда текстовое поле имеет фокус с реализацией во ViewModel? - PullRequest
1 голос
/ 30 декабря 2010

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

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

1 Ответ

2 голосов
/ 30 декабря 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...