DataBinding avancé Mitsuru FURUTA, relations techniques développeurs – Pierre LAGARDE, relations techniques développeurs - Présentation technique, Paris, 28 septembre 2005
Agenda Introduction Les sources de données Le modèle ASP.NET (v1 et v2) Le modèle WinForms Conclusion
Introduction Pourquoi cette technologie ? Architecture en couches Contrôles génériques Liaison bidirectionnelle Contrôleur de type MVC Contrat nécessaire entre les contrôles et les sources de données Les sources de données Implémentation d’interfaces communes définissant le modèle Les éléments simples et les collections TypeDescriptor, notion de vue Les contrôles Connexions aux vues et aux interfaces de binding
Démo Démo 1: Helloworld… …ou presque
Introduction Ca marche tout seul Binding sur objets Binding sur collections Binding en mode design Binding == Reflection ?
Les sources de données Mise en évidence des TypeDescriptors Interception d’un changement de valeur Personnalisation de la vue d’un objet Ajout d’une propriété Champ calculé Objet clone Les collections Fonctionnement de base: array, generics Personnalisation de la vue depuis la collection (ITypedList) OnCalc Objets « relais »: DataView, BindingSource, ObjectDataSource L’interface IBindingList Ajout d’un élément virtuel Le cas du DataSet
Les sources de données, les TypeDescriptors Du Type au TypeDescriptor TypeDescriptor.GetProperties(type) Rôle des PropertyDescriptors: Définit la vue d’une propriété (nom, type, etc) Fournit un accès à la valeur de chaque propriété lecture et en écriture Possibilité de se brancher aux évènements (Changed)
TypeDescriptor Customer •Id •Name •CompanyName •IsPartner •Id •Name •CompanyName •IsPartner TypeDescriptor •Id •Name •CompanyName •IsPartner •Id •Name •CompanyName •IsPartner DataBinding Reflection
Démo Démo 2: mise en évidence du TypeDescriptor
Les sources de données, personnalisation de la vue d’un objet L’interface ICustomTypeDescriptor GetProperties() permet la réécriture de la vue d’un objet propriété par propriété. (via les PropertyDescriptors) Différence entre TypeDescriptor.GetProperties(object) et TypeDescriptor.GetProperties(type) TypeDescriptor.GetProperties(object) renvoie les PropertyDescriptors éventuellement réécrites par ICustomTypeDescriptor TypeDescriptor.GetProperties(type) renvoie les PropertyDescriptors du type de base sans tenir compte d’une éventuelle implémentation d’ICustomTypeDescriptor
ICustomTypeDescriptor Order •OrderId •Amount •OrderId •Amount ICustomType Descriptor •OrderId •Amount •OrderId •Amount DataBinding Reflection •Fake
Les sources de données, ICustomTypeDescriptor
Démo Démo 3: ajout d’une propriété virtuelle
Les sources de données, « la guerre des clones » Création d’un objet à la vue entièrement paramétrable Réécriture complète de l’ensemble des PropertyDescriptors Mise en place d’une collection de définitions de propriétés
ICustomTypeDescriptor CustomTypeObject •Properties[] ICustomType Descriptor DataBinding Reflection •Name •Text •Anything •Name •Text •Anything •Name •Text •Anything •Name •Text •Anything
Démo Démo 3 bis: vue dynamique
Les sources de données, les collections Modifier la vue d’un objet depuis une collection Permet d’être indépendant de la définition de l’objet Permet de faire des modifications propre à la présentation L’interface ITypedList GetItemProperties(): redéfinit la vue des éléments de la collection Attention aux listes hétérogènes ! Le type des éléments n’est testé qu’une seule fois (TypeDescriptors uniques !)
Les sources de données, ITypedList Collections: ArrayList, générics, … •Id •Name •CompanyName •IsPartner •Id •Name •CompanyName •IsPartner ITypedList •Id •Name •CompanyName •IsPartner •Id •Name •CompanyName •IsPartner DataBinding Reflection •Fake Items[]
Les sources de données, ITypedList
Démo Demo 4: ajout d’une propriété virtuelle à une collection
Démo Demo 5: ajout d’un item virtuel à la vue
Les sources de données Pourquoi IListSource ? Palier au manque de délégation d’implémentation d’interface
Les sources de données Le cas du DataSet
Le modèle WinForms La classe System.Windows.Form, support du moteur de Binding Les managers PropertyManager CurrencyManager L’objet BindingContext
Le modèle ASP.NET