Александр Шер Разработчик ООО «Айко» Microsoft TechDays http://www.techdays.ru Зачем WPF и XAML разработчику? Styles & Templates Bindings RoutedEvents & InputBindings Triggers – управление представлением Практические заметки Microsoft TechDays http://www.techdays.ru – WPF для тех, кому нужна излинше навороченная графика – Все это жудко тормозит – Нет никакого дизайнера форм, а Blend надо покупать отдельно – Стандартных контролов мало, а контролы третьих фирм надо для WPF покупать заново – А что мне дает WPF как разработчику? Microsoft TechDays http://www.techdays.ru WPF предоставляет очень много возможностей для создания пользовательских интерфейсов (Представление != Графика) Какие из них использовать – решать Вам! Большинство пользователей любит красивые приложения Microsoft TechDays http://www.techdays.ru WinForms порождает отдельный handle для каждого элемента управления в окне, а WPF использует всего один* – само окно WPF умеет использовать 3D-ускоритель Бизнес приложение не требует графики уровня 3D-шутера Пример из жизни: приложение iiko Front для кассовых терминалов создано на WPF и работает на компьютерах с 1ГГц проц и 256Мб памяти Microsoft TechDays http://www.techdays.ru В сложных приложениях дизайнер WinForms все равно со временем «отваливается» WPF позволяет легко создавать пользовательские интерфейсы без дизайнера Blend входит в MSDN Premium, а «коробка» стоит меньше 100$ Microsoft TechDays http://www.techdays.ru В WPF логика контрола полностью отделена от представления Во многих случаях в отдельном контроле нет необходимости – достаточно настроить Template Чарты, гриды и красивые элементы управления легко создаются в WPF стандартными средствами DataGrid и Calendar уже есть (http://www.codeplex.com/wpf/) Microsoft TechDays http://www.techdays.ru WPF действительно позволяет отделить представление от логики и данных «Чистая» реализация паттернов вроде MVC Покрытие юнит-тестами Разработка UI параллельно с логикой Механизмы стилей и шаблонов значительно повышают code reuse Более 90% всего, что связано с представлением, создается декларативно Microsoft TechDays http://www.techdays.ru WPF позволяет хранить в ресурсах экземпляр любого объекта с ключом любого типа Словарь ресурсов может ссылаться на другие словари Любой контрол, стиль или темплейт имеет свой словарь ресурсов Microsoft TechDays http://www.techdays.ru Стиль – это набор ресурсов, значений свойств, обработчиков событий и триггеров Стили могут применяться явно или автоматически в пределах любой области видимости Стили поддерживают наследование и применение отдельных частей стиля в зависимости от типа контрола StyleSelector’ы позволяют применять стили в соответствии с заданной логикой Microsoft TechDays http://www.techdays.ru Темплейты позволяют полностью изменить внешний вид контрола Логика поведения контрола может использовать именованные части темплейта Элементы в темплейте могут использовать значения свойств контрола DataTemplateSelector’ы позволяют выбирать темплейт в зависимости от данных Microsoft TechDays http://www.techdays.ru XmlDataProvider – работа с XML ObjectDataProvider – вызов методов и создание экземпляров класса CollectionViewSource – фильтрация, сортировка, группировка CompositeCollection – объединение коллекций Microsoft TechDays http://www.techdays.ru В WPF можно привязать значение DependencyProperty к любому набору источников Свойство не ReadOnly FrameworkPropertyMetadata.IsNotDataBindable == false Binding’и могут быть в любом направлении, с конвертацией данных, с явным или автоматическим обновлением, валидацией Источник может быть задан явно, относительно Binding’а или по имени Microsoft TechDays http://www.techdays.ru DataContext позволяет привязывать данные к иерархии объектов DataContext наследует значение Значение этого свойства у родителя передается всем дочерним контролам, для которых оно не задано явно Binding’и других свойств объекта затем могут быть заданы относительно DataContext’а Microsoft TechDays http://www.techdays.ru Механизм RoutedEvents позволяет одним контролам порождать команды, а другим перехватывать и выполнять действия Команды передаются по дереву контролов и могут быть перехвачены несколькими контролами Обработчики для команд также могут задаваться в стилях WPF позволяет порождать команды с помощью комбинации клавиш и нажатий кнопок мыши (InputBindings) Microsoft TechDays http://www.techdays.ru Триггеры позволяют декларативно описывать измения свойства контролов и управлять анимацией Триггеры можно: вешать на срабатывание событий или изменение значений свойств задавать на уровне контролов, стилей или темплейтов комбинировать с биндингами для полного контроля над изменениями представления Microsoft TechDays http://www.techdays.ru Используйте DataContext для поддерева контролов, связанных с общим источником данных Выделяйте все повторяющиеся значения свойств контролов в стили Храните описание темплейтов как можно выше в дереве контролов Старайтесь подключать словари ресурсов на уровне Application (если допускает Scope) Активное использование RoutedCommands не сильно, но снижает производительность Microsoft TechDays http://www.techdays.ru CustomControl + Template предпочтительнее UserControl Используйте ValueConverter’ы и Selector’ы DataTrigger + MultiBinding + Converter дает больше контроля, чем MultiDataTrigger Не ориентируйтесь на взаимное расположение частей контрола Старайтесь не использовать код в самом представлении, но не делайте из этого табу! Microsoft TechDays http://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 TechDays http://www.techdays.ru Microsoft TechDays http://www.techdays.ru