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

Post on 21-Mar-2016

76 views 3 download

description

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

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

Microsoft TechDayshttp://www.techdays.ru

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

Microsoft TechDayshttp://www.techdays.ru

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

Microsoft TechDayshttp://www.techdays.ru

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

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

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

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

Microsoft TechDayshttp://www.techdays.ru

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

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

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

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

Microsoft TechDayshttp://www.techdays.ru

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

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

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

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

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

Microsoft TechDayshttp://www.techdays.ru

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

Microsoft TechDayshttp://www.techdays.ru

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

Microsoft TechDayshttp://www.techdays.ru

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

Microsoft TechDayshttp://www.techdays.ru

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

Microsoft TechDayshttp://www.techdays.ru

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

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

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

Microsoft TechDayshttp://www.techdays.ru

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

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

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

Microsoft TechDayshttp://www.techdays.ru

RoutedEvents & InputBindings

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

Microsoft TechDayshttp://www.techdays.ru

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

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

Microsoft TechDayshttp://www.techdays.ru

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

Microsoft TechDayshttp://www.techdays.ru

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

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/

Microsoft TechDayshttp://www.techdays.ru

Спасибо!