Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Реклама

Windows presentation foundation with - MacDonald M.

MacDonald M. Windows presentation foundation with — Вильямс , 2008. — 928 c.
ISBN 978-5-8459-1429-3
Скачать (прямая ссылка): wpfwindowspresente2008.pdf
Предыдущая << 1 .. 140 141 142 143 144 145 < 146 > 147 148 149 150 151 152 .. 473 >> Следующая

В этой главе речь пойдет о том, как использовать заготовленные классы команд в WPF, как связывать их с элементами управления и как определять свои собственные команды. Также здесь будут рассмотрены ограничения модели команд, такие как отсутствие журнала хронологии команд и отсутствие поддержки для используемой на уровне приложения функции Undo, и показано, как создавать свои собственные аналоги.
Общие сведения о командах
В хорошо спроектированном приложении Windows логика приложения находится не в обработчиках событий, а закодирована в имеющих более высокий уровень методах. Каждый из этих методов представляет одну решаемую приложением “задачу” (task). Каждая задача может полагаться на дополнительные библиотеки (вроде отдельно компилируемых компонентов, в которых инкапсулируется бизнес-логика или доступ к базе данных). Пример таких отношений показан на рис. 10.1.
Наиболее очевидным способом использования такого дизайна является добавление обработчиков событий везде, где они нужны, и применение каждого из них для вызова соответствующего метода приложения. По сути, в таком случае код окна превращается в облегченную коммутационную панель, которая реагирует на ввод и пересылает запросы внутрь приложения.
Хотя такой дизайн является вполне разумным, он не экономит никаких усилий. Многие задачи приложения могут инициироваться по различным маршрутам, из-за чего часто все равно приходится писать несколько обработчиков событий, вызывающих один и тот же метод приложения. Именно в этом нет особой проблемы (потому что код коммутационной панели так прост), но жизнь гораздо усложняется, когда приходится иметь дело с состоянием пользовательского интерфейса.
Book_Pro_WPF-2.mdb 289 19.05.2008 18:10:13
290 Глава 10
Рис. 10.1. Отображение обработчиков событий на задачу
Понять, о чем идет речь, поможет простой пример. Предположим, что есть программа, в состав которой входит метод по имени PrintDocument() . Этот метод может инициироваться четырьмя способами: через главное меню (путем выбора в меню File (Файл) команды Print (Печать)), через контекстное меню (путем выполнения щелчка правой кнопкой мыши в пустой области и выбора в появившемся контекстном меню команды Print (Печать)), с помощью клавиатурной комбинации (<Ctrl+P>) и с помощью соответствующей кнопки в панели инструментов. В определенных точках жизненного цикла приложения задача PrintDocument() должна быть недоступной. Это подразумевает отключение соответствующих команд в двух меню и кнопки в панели инструментов таким образом, чтобы на них нельзя было выполнять щелчок, а также игнорирование клавиатурной комбинации <Ctrl+P>. Написание делающего это кода (и добавление кода, включающего данные элементы управления позже) — очень непростой подход. Даже еще хуже то, что допущение в нем ошибки может привести к тому, что различные блоки кода состояния будут перекрываться неправильно, оставляя элемент управления в активном состоянии даже тогда, когда он не должен быть доступен. Написание и отладка подобного кода является одним из наименее приятных аспектов разработки Windows-приложений.
К удивлению многих опытных разработчиков Windows-приложений, в наборе инструментальных средств Windows Forms не было никаких функциональных возможностей, которые могли бы облегчать выполнение подобных операций. Разработчики могли создавать необходимую им инфраструктуру самостоятельно, но большинство из них предпочитало этого не делать.
К счастью, WPF заполняет этот пробел, предлагая новую командную модель, которая предоставляет две следующих важных возможности:
• делегирование событий подходящим командам;
• поддержание включенного состояния элемента управления в синхронизированном виде с помощью состояния соответствующей команды.
Командная модель WPF является не настолько прямолинейной, как хотелось бы. Для подключения к модели маршрутизируемых событий ей требуется несколько отдельных компонентов, о которых еще будет рассказываться в этой главе. Однако в концептуальном плане она является достаточно простой. На рис. 10.2 показано, как основанное на командах приложение изменяет дизайн, приводившийся на рис. 10.1. Теперь каждое действие, которое инициирует печать (т.е. щелчок на кнопке, щелчок на элементе меню и нажатие клавиатурной комбинации <Ctrl+P>), отображается на одну и ту же команду. Эта команда с помощью привязки соединяется в коде со всего лишь одним обработчиком событий.
Book_Pro_WPF-2.mdb 290 19.05.2008 18:10:13
Команды 291
Рис. 10.2. Отображение событий на команду
Система команд WPF является прекрасным средством для упрощения дизайна приложения. Однако в ней все равно имеются кое-какие серьезные пробелы. В частности, WPF не поддерживает:
• отслеживание команд (например, хронология ранее выполненных команд);
• “невыполнимые” команды;
• команды, которые имеют состояние и могут находиться в различных “режимах” (например, команда, которая может включаться и отключаться).
Модель команд WPF
Модель команд WPF состоит из удивительного количества подвижных частей. Ключевыми в ней являются четыре следующих компонента.
Предыдущая << 1 .. 140 141 142 143 144 145 < 146 > 147 148 149 150 151 152 .. 473 >> Следующая