Loading

Maîtriser Silverlight

none

Silverlight se montre brillant dans un certain nombre de domaines, mais il est aussi source de frustrations.

De la personnalisation de l’interface utilisateur de votre application jusqu’à la résolution des bugs et messages d’erreur obscurs, cet article vous aide à passer aux outils Silverlight dans de bonnes conditions.

Ce dossier est issu de notre publication IT Pro Magazine (09/10). Pour consulter les schémas et illustrations associés, rendez-vous dans le club abonnés.


Q : J’essaie de créer une application Silverlight métier, mais beaucoup d’exemples disponibles sont soit compliqués, soit inappropriés pour ce type d’application. Nous souhaitons qu’un utilisateur puisse sélectionner un type d’élément à ouvrir, qu’il affiche un écran de recherche, puis qu’il modifie les données, lesquelles peuvent être un enregistrement parent-enfant. Je vois des outils de démonstration qui semblent éliminer une grande partie du temps de développement, mais je ne comprends pas comment utiliser ces éléments ensemble. Ces outils sont-ils appropriés pour des applications réelles ou sont-ils uniquement bons pour les démos ?

R : Au fil des années, une multitude de produits de démonstration ont été présentés, mais de nombreux composants de l’actuel kit Silverlight peuvent faire gagner beaucoup de temps. Une partie de l’astuce consiste à intégrer suffisamment de flexibilité afin que vous puissiez employer des techniques de développement automatisées au moment et dans les cas opportuns. Par exemple, vous pouvez générer nombre de vos écrans automatiquement au début du développement, puis en personnaliser certains d’eux, à mesure que vous approchez de la version définitive de l’application. Nous allons voir comment combiner la navigation, les fenêtres enfant et le formulaire de données (DataForm) pour créer une interface utilisateur fort utile, avec notamment un affichage maître/détails des données. Cette interface ne requiert pas de code personnalisé, mais vous pouvez lui ajouter des contrôles utilisateur personnalisés lorsque l’approche par défaut ne fonctionne pas. Vous-même ou un concepteur graphique pouvez améliorer l’aspect général car ces contrôles se prêtent bien aux effets de style.

Pour mettre l’accent sur une association intelligente de parties d’interface utilisateur personnalisées et automatiques, je vais ignorer l’étape du pipeline et prendre l’hypothèse d’un objet de données tout simple et d’un service local qui gère les opérations sur les données. Nous allons aussi passer l’étape de la création des menus et des commandes. Nous allons voir une application avec un lien hypertexte servant à accéder à une page d’édition. Lorsque l’utilisateur sélectionne le lien, une boîte de dialogue de recherche pseudo-modale apparaît et permet un futur filtrage des données avant l’affichage complet de la page d’édition. Les affichages de recherche et d’édition sont basés sur le contrôle DataForm. Ce dernier a été conçu pour une utilisation avec RIA Services, mais l’exemple illustre sa mise en oeuvre avec un autre pipeline (fictif ). Peter Vogel propose une introduction au contrôle DataForm dans un article précédent (« Silverlight 3 intègre le développement d’applications orientées données », http://www.itpro.fr, Club Abonnés, IT Pro Magazine, novembre 2009).

J’utiliserai également le Managed Extensibility Framework (MEF) afin d’introduire de la flexibilité dans l’application résultante. Lors de la mise en place des composants clés de l’application, notamment les agencements de données, vous pouvez employer une solution généralisée, sauf lorsqu’un comportement personnalisé est nécessaire. Cet exemple a été créé dans Visual Studio 2008 avec Silverlight 3, la version de novembre du Silverlight Toolkit et MEF Preview 8 (téléchargée après la résolution de bug du 11 novembre 2009). Je commence par créer une application de navigation Silverlight (Silverlight Navigation Application), laquelle est disponible sous forme de type de projet après l’installation du Silverlight Toolkit. Elle crée une page avec un cadre de navigation utilisable pour vous déplacer dans l’application. Si vous travaillez dans le navigateur, ce contrôle fournit une meilleure interactivité. Même si cette page a d’emblée belle allure, sa véritable valeur tient à son utilisation en tant que page maître. Vous pouvez ajouter des liens, un menu sous forme d’arborescence et d’autres contrôles pour manipuler la zone de contenu. Ces liens apparaîtront au cours de la navigation et lui conféreront un comportement, du type précédent et suivant. Vous pouvez aussi enrichir visuellement la page maître afin de conférer un aspect exclusif à votre application. L’ajout d’un lien à la page permet à l’utilisateur de lancer la navigation :

<HyperlinkButton Style=»{StaticResource LinkStyle}» NavigateUri=»/Invoice»
TargetName=»ContentFrame» Content=»invoice»/>

TargetName pointe vers un cadre Silverlight qui gère la navigation URI, y compris le mappage. Le mappage évite aux emplacements physiques codés en dur d’apparaître dans tout le code source de votre application et affiche les URI abstraits et non physiques à l’utilisateur final :

<navigation:Frame.UriMapper>
<uriMapper:UriMapper> <uriMapper:UriMapping Uri=»» MappedUri=»/Views/Home.xaml»/>
<uriMapper:UriMapping Uri=»/Invoice»
MappedUri=»/Views/GeneralForm.xaml?biz=Invoice»/>
<uriMapper:UriMapping Uri=»/{page- Name}»
MappedUri=»/Views/{pageName}.xaml»/>
</uriMapper:UriMapper>
</navigation:Frame.UriMapper>

La première entrée mappe le contenu par défaut, la deuxième le contenu explicite et la troisième, le contenu restant.

Dès que l’utilisateur sélectionne le lien hyper-texte, la navigation vers la page est automatique. Il s’agit d’une page de navigation Silverlight (Silverlight Navigation Page) créée via la boîte de dialogue Add New Item. Le paramètre de requête est disponible dans la méthode NavigateTo de la page cible :

Protected Overrides Sub OnNavigatedTo(ByVal e As
NavigationEventArgs)
Dim argName = «biz»
If NavigationContext. QueryString.
ContainsKey(argName) Then _bizClassName =
NavigationContext. QueryString(argName)

Le type cible de l’argument biz est utilisable avec un peu de MEF pour sélectionner une fenêtre de recherche. Une fabrique MEF peut activer une fenêtre de recherche personnalisée s’il en existe une et, dans le cas contraire, employer une recherche par défaut. Qu’elle soit standard ou personnalisée, la fenêtre de recherche doit implémenter une interface personnalisée (ISearchForm) et être une ChildWindow pour permettre l’affichage modal. La fenêtre de recherche est stockée deux fois, dans un champ de chaque type :

_searchForm = _searchFactory. _
GetItem(_bizClassName)
_searchChild = TryCast( _
_searchForm, ChildWindow)
If _searchChild Is Nothing Then
Throw New InvalidOperationException( _
«Must be child window») End If

Silverlight diffère de WinForm car il ne bloque pas complètement la thread lorsqu’une boîte de dialogue est affichée. Cela requiert que la boîte de dialogue respecte un modèle asynchrone et déclenche un événement lorsqu’elle est fermée par l’utilisateur :

AddHandler _searchChild.Closed, _
AddressOf Search_Closed
_searchForm.Show(_bizClassName)
End If
End Sub

Une fois la fenêtre de recherche fermée, le contrôle retourne au gestionnaire d’événements Search_Closed. Cette méthode vérifie le résultat de la boîte de dialogue pour déterminer de quelle manière l’utilisateur a fermé la fenêtre. S’il ne s’agit pas d’une annulation, une autre fabrique MEF essaie de trouver un contrôle utilisateur edit personnalisé. Si elle en trouve un, il s’affiche et remplit la zone de contenu de cette page :

If _searchChild.DialogResult Then
Dim edit = TryCast(_editFactory.GetItem( _
_bizClassName), UserControl)
If edit IsNot Nothing Then
Me.dataContentBorder.Child = edit
Else
Me.dataContentBorder.Child = GetDataForm()
End If
Else
Me.NavigationService.GoBack()
End If

Si aucun contrôle utilisateur edit personnalisé n’est disponible, la méthode GetDataForm crée un contrôle utilisateur DataForm standard et définit un gestionnaire d’événements pour l’événement Auto- GeneratingField. Une fabrique MEF crée le service permettant de récupérer les données :

Private Function GetDataForm() As UIElement
Dim df = New DataForm()
df.SetBinding(DataForm.ItemsSourceProperty, _
New Data.Binding())
AddHandler df.AutoGeneratingField, _
AddressOf DataForm_AutoGeneratingField
_bizService = _bizServiceFactory.GetItem( _
_bizClassName)
Dim items = _bizService.RetrieveList( _
_searchForm.Filter)
Me.DataContext = items
Return df
End Function

12345
 
Blogger sur iTPro.fr ! Nous sommes constamment à la recherche de nouvelles voix et de nouvelles collaboration éditoriales sur iTPro.fr. Si vous êtes intéressés pour blogger ou écrire pour nous, contactez Sabine Terrey, Directrice de la rédaction, iTPro.fr.
Nous sommes ouverts à tous les thèmes portant sur les services, les solutions et les technologies informatiques d'entreprise. Notre seule condition sera la qualité de votre contribution, quel que soit votre thème de prédilection, actualités, annonces, lancements, stratégie, tutoriaux, trucs et astuces, bonnes pratiques... cette liste n'étant pas exhaustive, stay tuned, au plaisir de collaborer.
 
Guide SharePoint dédié à l’optimisation des donnéesGuide SharePoint dédié à l’optimisation des donnéesCe guide exclusif a été conçu pour est aider les administrateurs et responsables d’environnements SharePoint distribués à planifier et mettre en œuvre une stratégie de réplication complète, fiable et efficace. Découvrez les meilleures pratiques….Téléchargez le Guide SharePoint

Ressources Informatiques

1er Guide thématique dédié à la mise œuvre d’un Cloud Privé L’objet de ce 1er guide thématique publié par la rédaction du mensuel IT Pro Magazine est d’apporter aux responsables informatiques une synthèse…
   IT Pro Magazine | 12 pages
Découvrez le 1er Guide dédié à la mise en œuvre d’un Cloud Privé
Guide de protection des environnements Hyper-V La virtualisation pose de nouveaux défis en terme de protection des serveurs et de continuité d'activité. Découvrez comment mettre en œuvre la protection…
   ITPro Magazine | 4 pages
Téléchargez le guide dédié à la protection des environnements Hyper-V !
Guide d’optimisation & synchronisation des données SharePoint L'objet de ce guide est d'aider les administrateurs et responsables d’environnements SharePoint distribués à planifier et mettre en œuvre une stratégie…
   Avepoint | 18 pages
Découvrez les meilleures pratiques d’optimisation et synchronisation des données SharePoint
Booster les performances des plates-formes virtuelles ? Découvrez les meilleures pratiques pour optimiser radicalement les performances de vos environnements virtualisés tout en optimisant le fonctionnement…
   Diskeeper | 12 pages
Téléchargez maintenant ce livre blanc exclusif
IT Pro Magazine Spécial Windows 8 Au programme de cette édition de IT Pro Magazine, un dossier complet sur Windows 8, un aperçu de Hyper-V 3.0, le fonctionnement du Cloud Privé Microsoft,…
   IT Pro Magazine | 60 pages
Téléchargez cette édition gratuitement
Le guide du stockage signé IT Pro Magazine La modernisation de l'infrastructure de stockage ne s'improvise pas. Ce guide exclusif publié par IT Pro Magazine vous fera découvrir les technologies…
   IT Pro Magazine | 16 pages
Téléchargez le Guide des Solutions de Stockage Nouvelle Génération
 

Conseil & Expertise

Bénéficiez de toute l'expertise informatique des magazines,
découvrez les abonnements papiers et leurs compléments
numériques sur Internet via le Club Abonnés.

S'abonner au mensuel IT Pro Magazine pour - 9 € / mois

Déjà abonné à nos magazines informatiques professionnels ?

» Accédez aux services de votre
Club Abonnés sur iTPro.fr