databinding avancé mitsuru furuta, relations techniques développeurs...
TRANSCRIPT
DataBinding avancé
Mitsuru FURUTA, relations techniques développeursmailto:[email protected] – http://blogs.microsoft.fr/mitsufu
Pierre LAGARDE, relations techniques développeurs
mailto:[email protected] - http://blogs.developpeur.org/fox
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éesImplémentation d’interfaces communes définissant le modèle
Les éléments simples et les collectionsTypeDescriptor, notion de vue
Les contrôlesConnexions aux vues et aux interfaces de binding
Démo 1: Helloworld…
…ou presque
Introduction
Ca marche tout seulBinding sur objets
Binding sur collections
Binding en mode design
Binding == Reflection ?
Les sources de données
Mise en évidence des TypeDescriptorsInterception d’un changement de valeur
Personnalisation de la vue d’un objetAjout d’une propriété
Champ calculé
Objet clone
Les collectionsFonctionnement de base: array, generics
Personnalisation de la vue depuis la collection (ITypedList)
OnCalc
Objets « relais »: DataView, BindingSource, ObjectDataSourceL’interface IBindingList
Ajout d’un élément virtuel
Le cas du DataSet
Les sources de données, les TypeDescriptors
Du Type au TypeDescriptorTypeDescriptor.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
CustomerCustomer
•Id•Name•CompanyName•IsPartner
•Id•Name•CompanyName•IsPartner
TypeDescriptorTypeDescriptor
•Id•Name•CompanyName•IsPartner
•Id•Name•CompanyName•IsPartner
DataBindingDataBinding
ReflectionReflection
Démo 2: mise en évidence du TypeDescriptor
Les sources de données, personnalisation de la vue d’un objet
L’interface ICustomTypeDescriptorGetProperties() 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
OrderOrder
•OrderId•Amount•OrderId•Amount
ICustomTypeDescriptorICustomTypeDescriptor
•OrderId•Amount•OrderId•Amount
DataBindingDataBinding
ReflectionReflection
•Fake•Fake
Les sources de données, ICustomTypeDescriptor
Les sources de données, ICustomTypeDescriptor
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étrableRéécriture complète de l’ensemble des PropertyDescriptors
Mise en place d’une collection de définitions de propriétés
ICustomTypeDescriptor
CustomTypeObjectCustomTypeObject
•Properties[]•Properties[]
ICustomTypeDescriptorICustomTypeDescriptor
DataBindingDataBinding
ReflectionReflection
•Name•Text•Anything
•Name•Text•Anything
•Name•Text•Anything
•Name•Text•Anything
Démo 3 bis: vue dynamique
Les sources de données, les collections
Modifier la vue d’un objet depuis une collectionPermet d’être indépendant de la définition de l’objet
Permet de faire des modifications propre à la présentation
L’interface ITypedListGetItemProperties(): 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, …
Collections: ArrayList, générics, …
•Id•Name•CompanyName•IsPartner
•Id•Name•CompanyName•IsPartner
ITypedListITypedList
•Id•Name•CompanyName•IsPartner
•Id•Name•CompanyName•IsPartner
DataBindingDataBinding
ReflectionReflection
•Fake•Fake
Items[]Items[]
Les sources de données, ITypedList
Demo 4: ajout d’une propriété virtuelle à une collection
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 managersPropertyManager
CurrencyManager
L’objet BindingContext
Le modèle ASP.NET