View
63
Download
3
Category
Preview:
DESCRIPTION
Использование возможностей декларативного подхода в реальных проектах. Александр Шер Разработчик ООО «Айко». О чем пойдет речь?. Зачем WPF и XAML разработчику? Styles & Templates Bindings RoutedEvents & InputBindings Triggers – управление представлением Практические заметки. - PowerPoint PPT Presentation
Citation preview
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
Спасибо!
Recommended