Microsoft TechDayshttp:// Занятие 6 Создание приложений доступа к данным с помощью WPF Роман Здебский Тренинг Введение в разработку приложений на Windows Presentation Foundation
Microsoft TechDayshttp:// 2 Доступ к бизнес данным Визуализация Проверка Разворачивание
Microsoft TechDayshttp:// 3
5 DependencyObject DependencyProperty Resources Data binding Styles Animations Metadata overrides Property value inheritance WPF Designer integration Можно связывать практически все со всем. Свойства элементов управления, ресурсы… и т.п.
Microsoft TechDayshttp:// 6 Бизнес объект DataContext Связывание с бизнес объектом по полю Name Связывание через ElementName
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
Microsoft TechDayshttp:// 8
9 4 компонента: 1. source (источник) 2. source path (путь) 3. Целевой dependency object 4. Целевое dependency property Целевое dependency property Путь Целевой dependency object Источник
Microsoft TechDayshttp:// 10 Свойство Path Свойство XPath
Microsoft TechDayshttp:// 11 Удобная возможность связывать объект/коллекцию с иерархической группой элементов управления (в соответствии с визуальным деревом)
Microsoft TechDayshttp:// 12
Microsoft TechDayshttp:// 13 Напрямую из кода (теряем поддержку Blend) Напрямую в XAML подключив namespace Вызывается конструктор по умолчанию xmlns:obj="clr-namespace:WPFApplication1 … grd.DataContext = myCollection;
Microsoft TechDayshttp:// 14 Через ObjectDataProvider / XMLDataProvider Передача параметров в конструктор Привязка к методу (с параметрами) Возможность замены объекта-источника в период выполнения Создание объекта-источника асинхронно Через расширенный провайдер Rockford Lhotkas CSLA.NET framework или собственный Отложенная загрузка Работа с специализированными вебсервисами …
Microsoft TechDayshttp:// 15 Для обновления связанных элементов INotifyPropertyChanged Interface Для обновления удаляемых и добавляемых элементов ObservableCollection (INotifyCollectionChanged) BindingList (IBindingList) Детальный контроль в DataGrid IEditableObject
Microsoft TechDayshttp:// 16 Если ваш объект помечен как Serializable, то Formatter будет пытаться сериализовать все объекты подписанные на event – например Window = exception Josh Smith BindableObject – уменьшение фрагментации managed heap за счет кеширования PropertyChangedEventArgsBindableObject [field: NonSerializedAttribute()] public event ChangedEventHandler Changed;
Microsoft TechDayshttp:// 17 Свойство UpdateSourceTrigger определяет, когда источник будет обновлен: PropertyChanged LostFocus Explicit
Microsoft TechDayshttp:// 18 Свойство Binding – UpdateSourceTrigger По умолчанию – PropertyChanged (для Text- LostFocus) Явный контроль – Explicit, необходимо вручную вызывать – UpdateSource() DataGrid отменяет редактирование при Escape Подтверждает при переходе
Microsoft TechDayshttp:// 19 Поддержка обновлений
Microsoft TechDayshttp:// LINQ + ADO.NET Entity Framework
Microsoft TechDayshttp:// 21 Классы контекста реализуют INotifyPropertyChanged Классы коллекции контекста (EntitySet) не реализуют INotifyCollectionChanged (сознательно) реализует IListSource Необходимо добавлять и удалять данные только через BindingList BindingList emp = (from e in nw.Employees select e) as IListSource).GetList() as BindingList ;
Microsoft TechDayshttp:// 22 Классы контекста реализуют INotifyPropertyChanged Классы коллекции контекста (EntitySet) не реализуют INotifyCollectionChanged (сознательно) реализует IListSource Необходимо добавлять и удалять данные только через IBindingList IBindingList emp = (from e in nw.Employees select e) as IListSource).GetList() as IBindingList;
Microsoft TechDayshttp:// 23 Entity Framework, LINQ to SQL
Microsoft TechDayshttp:// 24 C# 3.0C# 3.0 VB 9.0VB 9.0 ДругиеДругие.NET Language Integrated Query Microsoft SQL Server, Oracle, DB2, MySQL… HTTP Сервер Клиент
Microsoft TechDayshttp:// 25 ADO.NET Data Services пока Не поддерживают INotifyPropertyChanged Не поддерживают IListSource Не используют ObservableCollection / BindingList Но это можно прозрачно реализовать ObservableCollection INotifyPropertyChanged
Microsoft TechDayshttp:// 26
Microsoft TechDayshttp:// 27 Возможность работать с ADO.NET Data Service в offline режиме Кеш в локальный легкий in-process SQL Server Compact (*.sdf файл) Кеш на уровне бизнес сущностей, а не таблиц. Microsoft Sync Framework – «умная» синхронизация Существенное упрощение разработки Smart- Clients с поддержкой offline и высокой производительностью, вне зависимости от качества сетевых подключений.
Microsoft TechDayshttp://
29 Уровень данных? Уровень бизнес-логики? Уровень пользовательского интерфейса?
Microsoft TechDayshttp:// 30 Валидация на уровне бизнес объектов IDataErrorInfo Использование существующей модели валидации {Binding ValidatesOnDataErrors=true} Визуализация по умолчанию
Microsoft TechDayshttp:// 31
Microsoft TechDayshttp:// 32 В случае отдельных диалогов UpdateSourceTrigger = Explicit Для отдельных элементов в рамках общей формы UpdateSourceTrigger = Explicit На уровне всей формы IEditableObject + Custom Collection Сильно упрощается при использовании Entity Framework ADO.NET Data Services Достаточно отменить изменения в DataContext
Microsoft TechDayshttp://
34
Microsoft TechDayshttp:// 35 Возможность декларативно определить способ представления повторяющихся данных в виде шаблона ListBox/ListView, TreeView и др. Сценарии шаблонов Линейные Иерархические
Microsoft TechDayshttp:// 36
Microsoft TechDayshttp:// 37 Value Converters (конверторы значений) Демо: BoolToVisibilityConverter Value Converters в XAML
Microsoft TechDayshttp:// 38 Чтобы конвертировать при связывании нужен IValueConverter:
Microsoft TechDayshttp:// 39
Microsoft TechDayshttp:// 40 Вид, который создается вокруг коллекций автоматически при DataBinding Может создаваться явно Реализует ICollectionView Контролирует текущую позицию Сортировка Фильтрация Группировка
Microsoft TechDayshttp:// 41
Microsoft TechDayshttp://
43 WPF Client Profile – 28 MB Common Language Runtime (CLR) ClickOnce Windows Forms Windows Presentation Foundation Windows Communication Foundation
Microsoft TechDayshttp:// 44 Автоматическая установка по ссылке в интрасети или интернет Автоматическое конфигурируемое обновление Нет необходимости в административных правах Легкость настройки
Microsoft TechDayshttp:// 45
Microsoft TechDayshttp:// 46
Microsoft TechDayshttp:// 47 © 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.