'

Microsoft TechDays Роман Здебский Эксперт по технологиям разработки ПО Microsoft rzdebski@microsoft.com

Понравилась презентация – покажи это...





Слайд 0


Слайд 1

Создание приложений доступа к данным с помощью WPF Роман Здебский Эксперт по технологиям разработки ПО Microsoft rzdebski@microsoft.com http://blogs.msdn.com/roman


Слайд 2

Продолжение преследует


Слайд 3

Бизнес-приложения на WPF Доступ к бизнес данным Визуализация Проверка Разворачивание


Слайд 4

Связывание с данными DataBinding


Слайд 5

DataBinding в WPF - Основа Framework DependencyObject DependencyProperty Resources Data binding Styles Animations Metadata overrides Property value inheritance WPF Designer integration Можно связывать практически все со всем. Свойства элементов управления, ресурсы… и т.п.


Слайд 6

DependencyProperty public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } }   // Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc... public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(WPFEditBox), new FrameworkPropertyMetadata("Reflections...", new PropertyChangedCallback(OnTextChanged))); propdp - snippet


Слайд 7

DataBinding в WPF и DependencyProperty Демонстрация


Слайд 8

DataContext – рай для MasterDetail Удобная возможность связывать объект/коллекцию с иерархической группой элементов управления (в соответствии с визуальным деревом)


Слайд 9

Что использовать для бизнес объектов? Унаследоваться от DependencyObject? Для работы DataBinding Target должен быть только DependencyObject Source может быть CLR Object или XML


Слайд 10

Как можно связать бизнес объекты с UI? Напрямую из кода (теряем поддержку Blend) Напрямую в XAML подключив namespace Вызывается конструктор по умолчанию xmlns:obj="clr-namespace:WPFApplication1” … <Window.Resources> <obj:NameList x:Key="NameListData"/> </Window.Resources> grd.DataContext = myCollection;


Слайд 11

Как можно связать бизнес объекты с UI? Через ObjectDataProvider / XMLDataProvider Передача параметров в конструктор Привязка к методу (с параметрами) Возможность замены объекта-источника в период выполнения Создание объекта-источника асинхронно Через расширенный провайдер Rockford Lhotka’s CSLA .NET framework или собственный Отложенная загрузка Работа с специализированными вебсервисами …


Слайд 12

Что нужно для поддержки редактирования? Для обновления связанных элементов INotifyPropertyChanged Interface Для обновления удаляемых и добавляемых элементов ObservableCollection<T> (INotifyCollectionChanged) BindingList (IBindingList) Детальный контроль в DataGrid IEditableObject


Слайд 13

Помните про сериализацию и оптимизацию Если ваш объект помечен как Serializable, то Formatter будет пытаться сериализовать все объекты подписанные на event – например Window ? = exception Josh Smith BindableObject – уменьшение фрагментации managed heap за счет кеширования PropertyChangedEventArgs [field: NonSerializedAttribute()] public event ChangedEventHandler Changed;


Слайд 14

Отмена/подтверждение редактирования Свойство Binding – UpdateSourceTrigger По умолчанию – PropertyChanged (для Text- LostFocus) Явный контроль – Explicit, необходимо вручную вызывать – UpdateSource() DataGrid отменяет редактирование при Escape Подтверждает при переходе


Слайд 15

Связывание простого объекта Демонстрация Поддержка обновлений


Слайд 16

Работа с современными источниками данных LINQ + ADO.NET Entity Framework


Слайд 17

LINQ to SQL Классы контекста реализуют INotifyPropertyChanged ? Классы коллекции контекста (EntitySet) не реализуют INotifyCollectionChanged (сознательно) реализует IListSource ? Необходимо добавлять и удалять данные только через BindingList BindingList<Employee> emp = (from e in nw.Employees select e) as IListSource).GetList() as BindingList<Employee>;


Слайд 18

Entity Framework Классы контекста реализуют INotifyPropertyChanged ? Классы коллекции контекста (EntitySet) не реализуют INotifyCollectionChanged (сознательно) реализует IListSource ? Необходимо добавлять и удалять данные только через IBindingList IBindingList emp = (from e in nw.Employees select e) as IListSource).GetList() as IBindingList;


Слайд 19

Использование ORM Демонстрация Entity Framework, LINQ to SQL


Слайд 20

ADO.NET Data Services .NET Language Integrated Query Реляционные источники Entity Framework ADO.NET REST API LINQ DS Provider HTTP Сервер Клиент ADO.NET DS Data Context


Слайд 21

Работа в многоуровневом сценарии ADO.NET Data Services 1.0 Не поддерживают INotifyPropertyChanged Не поддерживают IListSource Не используют ObservableCollection<T> / BindingList Но это можно прозрачно реализовать ObservableCollection<T> INotifyPropertyChanged


Слайд 22

Работа в многоуровневом сценарии ADO.NET Data Services 1.5 CTP Поддерживают INotifyPropertyChanged Поддерживают INotifyCollectionChanged Вызывайте метод – ToObservableEntityCollection


Слайд 23

ADO.NET Data Services Демонстрация


Слайд 24

ADO.NET Data Services Offline Возможность работать с ADO.NET Data Service в offline режиме Кеш в локальный легкий in-process SQL Server Compact (*.sdf файл) Кеш на уровне бизнес сущностей, а не таблиц. Microsoft Sync Framework – «умная» синхронизация Существенное упрощение разработки Smart-Clients с поддержкой offline и высокой производительностью, вне зависимости от качества сетевых подключений.


Слайд 25

Проверка данных Validation


Слайд 26

Где должна происходить проверка? Уровень данных? Уровень бизнес-логики? Уровень пользовательского интерфейса?


Слайд 27

IDataErrorInfo – валидация на уровне бизнес правил. Валидация на уровне бизнес объектов IDataErrorInfo Использование существующей модели валидации {Binding ValidatesOnDataErrors=true} Визуализация по умолчанию


Слайд 28

Проверка правильности данных Демонстрация


Слайд 29

Поддержка кнопки Cancel В случае отдельных диалогов UpdateSourceTrigger = Explicit Для отдельных элементов в рамках общей формы UpdateSourceTrigger = Explicit На уровне всей формы IEditableObject + Custom Collection Сильно упрощается при использовании Entity Framework ADO.NET Data Services Достаточно отменить изменения в DataContext


Слайд 30

Визуализация данных


Слайд 31

Используйте новые контролы Релиз! DataGrid, DatePicker, Calendar - поставляется вместе с исходным кодом в рамках WPF Toolkit на www.codeplex.com DataGrid - возможности: Авто-генерирование колонок Различные типы: Text, CheckBox, ComboBox, Button, Hyperlink + TemplateColumn Редактирование Фильтры и группировки Item Container Recycling Deferred Scrolling


Слайд 32

Data Templates Возможность декларативно определить способ представления повторяющихся данных в виде шаблона ListBox/ListView, TreeView и др. Сценарии шаблонов Линейные Иерархические <DataTemplate x:Key="itemTemplate"> <StackPanel x:Name="StackPanel"> <TextBlock x:Name="TextBlock1" Text="{Binding Mode=OneWay, XPath=title}"/> <TextBlock x:Name="TextBlock" Text="{Binding Mode=OneWay, XPath=pubDate}"/> </StackPanel> </DataTemplate> ?


Слайд 33

DataTemplates Демонстрация


Слайд 34

CollectionViews Вид, который создается вокруг коллекций автоматически при DataBinding Может создаваться явно Реализует ICollectionView Контролирует текущую позицию Сортировка Фильтрация Группировка


Слайд 35

CollectionViews Демонстрация


Слайд 36

Разворачивание Deployment


Слайд 37

Разворачивание WPF Client Profile – 28 MB Common Language Runtime (CLR) ClickOnce Windows Forms Windows Presentation Foundation Windows Communication Foundation


Слайд 38

ClickOnce Автоматическая установка по ссылке в интрасети или интернет Автоматическое конфигурируемое обновление Нет необходимости в административных правах Легкость настройки


Слайд 39

ClickOnce Демонстрация


Слайд 40

Распространение .NET 3.x Vista & Win7 Windows Update Улучшения в разворачивании % % ПК в США с .NET Framework 3.0 и выше


Слайд 41

.NET Framework 4.0 и Visual Studio 2010 Улучшение основ Повышение четкости текстов Развертывание Улучшение Interop Улучшение Accessibility & локализации Производительность Графика и UI Multi-touch DataGrid Ribbon Superbar Common Dialogs Effects Animation Media Enhancements (h.264 on Win7) Инструменты RAD LOB Designer Улучшения XAML Designer Улучшение взаимодействия Developer/Designer Visual State Manager Еще многое…


Слайд 42

Visual Studio 2010 WPF Designer


Слайд 43

Windows 7 – платформа для Ваших WPF приложений Прозрачная поддержка Touch всеми элементами управления WPF Поддержка TaskBar (TaskLists, и т.п.) Улучшения рендеринга текста с помощью DirectWrite Использование h.264, divx Ribbon


Слайд 44

PhotoSuru 2 Демонстрация


Слайд 45

О чем мы поговорили Связывание с данными в WPF Выбор способа связывания Возможности master/detail сценариев Возможности визуализации данных Разворачивание Ближайшее будущее


Слайд 46

Ресурсы WindowsClient.net/WPF CodePlex.com/WPF http://msdn.microsoft.com/en-us/netframework/aa663326.aspx


Слайд 47

Спасибо за внимание!


Слайд 48

© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.


Слайд 49


×

HTML:





Ссылка: