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

22

description

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

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

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

О чем пойдет речь?Зачем WPF и XAML разработчику?Styles & TemplatesBindingsRoutedEvents & InputBindingsTriggers – управление представлениемПрактические заметки

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

Microsoft TechDayshttp://www.techdays.ru

«Бытовое» мнение о WPF(или почему так мало WPF-приложений)– WPF для тех, кому нужна излинше

навороченная графика– Все это жудко тормозит– Нет никакого дизайнера форм, а Blend надо

покупать отдельно– Стандартных контролов мало, а контролы

третьих фирм надо для WPF покупать заново– А что мне дает WPF как разработчику?

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

Microsoft TechDayshttp://www.techdays.ru

«WPF для тех, кому нужна излинше навороченная графика»

WPF предоставляет очень много возможностей для создания пользовательских интерфейсов (Представление != Графика)

Какие из них использовать – решать Вам!

Большинство пользователей любит красивые приложения

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

«Нет никакого дизайнера форм, а Blend надо покупать отдельно»

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

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

Microsoft TechDayshttp://www.techdays.ru

«Стандартных контролов мало, а контролы третьих фирм надо для WPF покупать заново»В WPF логика контрола полностью

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

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

Microsoft TechDayshttp://www.techdays.ru

А что мне дает WPF как разработчику?

WPF действительно позволяет отделить представление от логики и данных

«Чистая» реализация паттернов вроде MVCПокрытие юнит-тестамиРазработка UI параллельно с логикой

Механизмы стилей и шаблонов значительно повышают code reuse Более 90% всего, что связано с представлением, создается декларативно

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

BindingsВ WPF можно привязать значение DependencyProperty к любому набору источников

Свойство не ReadOnly FrameworkPropertyMetadata.IsNotDataBindable == false

Binding’и могут быть в любом направлении, с конвертацией данных, с явным или автоматическим обновлением, валидациейИсточник может быть задан явно, относительно Binding’а или по имени

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

Microsoft TechDayshttp://www.techdays.ru

Свойство DataContextDataContext позволяет привязывать данные к иерархии объектовDataContext наследует значение

Значение этого свойства у родителя передается всем дочерним контролам, для которых оно не задано явно

Binding’и других свойств объекта затем могут быть заданы относительно DataContext’а

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

Microsoft TechDayshttp://www.techdays.ru

RoutedEvents & InputBindings

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

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

Microsoft TechDayshttp://www.techdays.ru

TriggersТриггеры позволяют декларативно описывать измения свойства контролов и управлять анимациейТриггеры можно:

вешать на срабатывание событий или изменение значений свойствзадавать на уровне контролов, стилей или темплейтовкомбинировать с биндингами для полного контроля над изменениями представления

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

СсылкиРаздел, посвященный 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/

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

Microsoft TechDayshttp://www.techdays.ru

Спасибо!

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