1 / 22

Использование возможностей декларативного подхода в реальных проектах

Использование возможностей декларативного подхода в реальных проектах. Александр Шер Разработчик ООО «Айко». О чем пойдет речь?. Зачем WPF и XAML разработчику? Styles & Templates Bindings RoutedEvents & InputBindings Triggers – управление представлением Практические заметки.

channer
Download Presentation

Использование возможностей декларативного подхода в реальных проектах

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Использование возможностей декларативного подхода в реальных проектах Александр Шер Разработчик ООО «Айко»

  2. О чем пойдет речь? • Зачем WPF и XAML разработчику? • Styles & Templates • Bindings • RoutedEvents & InputBindings • Triggers – управление представлением • Практические заметки

  3. «Бытовое» мнение о WPF(или почему так мало WPF-приложений) • WPF для тех, кому нужна излинше навороченная графика • Все это жудко тормозит • Нет никакого дизайнера форм, а Blend надо покупать отдельно • Стандартных контролов мало, а контролы третьих фирм надо для WPF покупать заново • А что мне дает WPF как разработчику?

  4. «WPF для тех, кому нужна излинше навороченная графика» • WPF предоставляет очень много возможностей для создания пользовательских интерфейсов (Представление != Графика) • Какие из них использовать – решать Вам! • Большинство пользователей любит красивые приложения

  5. «Все это жудко тормозит» • WinFormsпорождает отдельный handle для каждого элемента управленияв окне, а WPF использует всего один* – само окно • WPF умеет использовать 3D-ускоритель • Бизнес приложение не требует графики уровня 3D-шутера • Пример из жизни: приложение iiko Front для кассовых терминалов создано на WPF иработает на компьютерах с 1ГГц проц и 256Мб памяти

  6. «Нет никакого дизайнера форм, а Blend надо покупать отдельно» • В сложных приложениях дизайнер WinFormsвсе равно со временем «отваливается» • WPF позволяет легко создавать пользовательские интерфейсы без дизайнера • Blend входитв MSDN Premium, а «коробка» стоит меньше 100$

  7. «Стандартных контролов мало, а контролы третьих фирм надо для WPF покупать заново» • В WPF логика контрола полностью отделена от представления • Во многих случаях в отдельном контроле нет необходимости – достаточно настроить Template • Чарты, гриды и красивые элементы управления легко создаются в WPF стандартными средствами • DataGridи Calendar уже есть (http://www.codeplex.com/wpf/)

  8. А что мне дает WPF как разработчику? • WPF действительно позволяет отделить представление от логики и данных • «Чистая» реализация паттернов вроде MVC • Покрытие юнит-тестами • Разработка UI параллельно с логикой • Механизмы стилей и шаблонов значительно повышают code reuse • Более 90% всего, что связано с представлением, создается декларативно

  9. ResourceDictionary • WPF позволяет хранить в ресурсах экземпляр любого объекта с ключом любого типа • Словарь ресурсовможет ссылаться на другие словари • Любой контрол, стиль или темплейт имеет свой словарь ресурсов

  10. Styles • Стиль – это набор ресурсов, значений свойств, обработчиков событий и триггеров • Стили могут применяться явно или автоматически в пределах любой области видимости • Стили поддерживают наследование и применение отдельных частей стиля в зависимости от типа контрола • StyleSelector’ы позволяют применять стили в соответствии с заданной логикой

  11. Templates • Темплейты позволяют полностью изменить внешний вид контрола • Логика поведения контрола может использовать именованные части темплейта • Элементы в темплейте могут использовать значения свойств контрола • DataTemplateSelector’ы позволяютвыбирать темплейт в зависимости от данных

  12. Работа с данными • XmlDataProvider – работа с XML • ObjectDataProvider – вызов методов и создание экземпляров класса • CollectionViewSource – фильтрация, сортировка, группировка • CompositeCollection – объединение коллекций

  13. Bindings • В WPF можно привязать значение DependencyProperty к любому набору источников • Свойство не ReadOnly • FrameworkPropertyMetadata.IsNotDataBindable == false • Binding’и могут быть в любом направлении, с конвертацией данных, с явным или автоматическим обновлением, валидацией • Источник может быть задан явно, относительно Binding’а или по имени

  14. Свойство DataContext • DataContextпозволяет привязывать данные к иерархии объектов • DataContextнаследует значение • Значение этого свойства у родителя передается всем дочерним контролам, для которых оно не задано явно • Binding’и других свойств объекта затем могут быть заданы относительно DataContext’а

  15. RoutedEvents& InputBindings • Механизм RoutedEventsпозволяет одним контролам порождатькоманды, а другим перехватывать и выполнять действия • Команды передаются по дереву контролов и могут быть перехвачены несколькими контролами • Обработчики для команд также могут задаваться в стилях • WPF позволяет порождать команды с помощью комбинации клавиш и нажатий кнопок мыши (InputBindings)

  16. Triggers • Триггеры позволяют декларативно описывать измения свойства контролов и управлять анимацией • Триггеры можно: • вешать на срабатывание событий или изменение значений свойств • задавать на уровне контролов, стилей или темплейтов • комбинировать с биндингами для полного контроля над изменениями представления

  17. Практические заметки • Используйте DataContextдля поддерева контролов, связанных с общим источником данных • Выделяйте все повторяющиеся значения свойств контролов в стили • Храните описание темплейтов как можно выше в дереве контролов • Старайтесь подключать словари ресурсов на уровне Application (если допускает Scope) • Активное использование RoutedCommands не сильно, но снижает производительность

  18. Практические заметки • CustomControl + Template предпочтительнее UserControl • Используйте ValueConverter’ы и Selector’ы • DataTrigger + MultiBinding + Converter дает больше контроля, чемMultiDataTrigger • Не ориентируйтесь на взаимное расположение частей контрола • Старайтесь не использовать код в самом представлении, но не делайте из этого табу!

  19. Ссылки • Раздел, посвященный WPF в MSDN:http://msdn.microsoft.com/wpf • WPF на CodePlex: http://www.codeplex.com/wpf • Собрание блоггеров (Dr. WPF, John Smith, Beatriz Costa, etc.):http://wpfdisciples.wordpress.com/

  20. Спасибо!

More Related