DataBinding avancé Mitsuru FURUTA, relations techniques développeurs...

Preview:

Citation preview

DataBinding avancé

Mitsuru FURUTA, relations techniques développeursmailto:mitsufu@microsoft.com – http://blogs.microsoft.fr/mitsufu

Pierre LAGARDE, relations techniques développeurs

mailto:pierlag@microsoft.com - 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

Recommended