Silverlight–Indiquer à l’utilisateur si des modifications sont en cours avant de changer de page

Depuis la version 2 de Silverlight, il est comme vous le savez, possible de mettre en place une navigation par page. Afin que celle-ci fonctionne correctement il faut donc un UserControl contenant une NavigationFrame avec un UriMapper configuré comme par exemple dans le XAML suivant:

 <navigation:Frame
     x:Name="MasterPageContentFrame"
     Style="{StaticResource ContentFrameStyle}">
      <navigation:Frame.UriMapper>
       <uriMapper:UriMapper>
         <uriMapper:UriMapping Uri="/{SubDirectory}/{pageName}" MappedUri="/Views/{SubDirectory}/{pageName}.xaml"/>
       </uriMapper:UriMapper>
      </navigation:Frame.UriMapper>
 </navigation:Frame>

Dans cet article je vous propose de mettre en place un système permettant de notifier l’utilisateur si il essaie de naviguer vers une autre page, alors que des modifications sont en cours.

Lire la suite…

Récupérer la description d’une propriété

Comme vous le savez, lors du design d’un composant, au même titre que l’on utilise des attributs comme “Browsable”,  il est courant d’utiliser l’attribut description pour fournir une description de la propriété qui sera affichée dans un composant graphique tel qu’un property grid.

Dans ce billet je vous propose juste de mettre en place une méthode helper pour simplifier la récupération de cette description par le code.

Lire la suite…

Démarrer une animation sur un nouveau thread d’UI

Récemment j’ai utilisé un contrôle d’une librairie tierce permettant de générer des rapports.  Ce contrôle relativement complexe pouvait mettre jusqu’à plusieurs secondes pour s’afficher correctement selon la machine sur laquelle est exécutée l’application.

Le chargement du contrôle est lié au thread de l’interface utilisateur et le temps que le contrôle n’est pas entièrement chargé l’utilisateur ne peut effectuer aucune autre action via l’interface. Une interface non utilisable, même quelques secondes peut être qualifiée comme un “plantage”, et il n’est pas rare de voir alors l’utilisateur essayer de cliquer plusieurs fois.

Lire la suite…

Categories: WPF Tags: , ,

Afficher un Message de confirmation lors de l’exécution d’une ICommand

Lorsqu’on utilise le pattern MVVM et les ICommand, il nous arrive régulièrement de vouloir afficher une Message Box de confirmation avant de procéder à l’exécution de la Commande. C’est notamment le cas pour la suppression d’un élément afin d’éviter tout action faite par erreur et non désirée par l’utilisateur.

La solution que je vais présenter dans ce billet n’est en rien LA solution, mais une solution possible que j’utilise dans les projets sur lesquels je travaille.

Lire la suite…

Categories: Silverlight, WPF Tags: , , ,

Accès à l’IsolatedStorage depuis des applications différentes d’un même site

Récemment j’ai eu le besoin de partager des informations entre différentes applications Silverlight qui étaient hébergées sur le même site. Par même site il faut comprendre accessibles depuis le même sous domaine.

Prenons un exemple.

Deux applications disponibles de la manière suivante:

Chacune des applications se trouvant aux Urls ci-dessus ont un espace de stockage dédié à l’application. Il est possible d’y ajouter ou modifier des éléments à partir d’ApplicationSettings.

IsolatedStorageSettings.ApplicationSettings.Add("key", "value");

Maintenant pour avoir un espace partagé entre les applications xap des sites App1 et App2, il vous suffit simplement d’accéder à l’IsolatedStorage via SiteSettings se trouvant également dans IsolatedStorageSettings.

IsolatedStorageSettings.SiteSettings.Add("key", "value");

Rien de bien compliqué, mais plutôt pratique !!

La méthode que nous venons de voir correspond à un raccourci pour obtenir le contenu des différents stores. Pour une plus grande souplesse vous pouvez accéder à ces stores via les méthodes

    IsolatedStorageFile.GetUserStoreForApplication();
    IsolatedStorageFile.GetUserStoreForSite();

    A partir de là, vous pourrez par exemple créer une arborescence, connaitre l’espace utilisé et restant, agrandir l’espace courant pour stoker un nombre de données plus important…

MEF- AppSettings Catalog

Si vous avez lu les précédents billets, vous aurez remarqué que ces derniers parlent de situations rencontrées lors de ma mission actuelle. Ce sera encore le cas pour ce billet, où nous allons voir comment créer un catalogue basé sur les AppSettings du fichier de configuration.

Besoin:

Dans cette application, nous avons un service d’authentification qui selon certains critères peut choisir tel ou tel module pour authentifier l’utilisateur. La résolution du module en question est faite via MEF. Ce module peut avoir besoin de paramètres comme par exemple l’url d’un Web Service et l’environnement sur lequel on souhaite réaliser cette opération.

Plutôt que de toujours faire appel à ConfigurationManager.AppSettings[key] dans le module lui-même je souhaitais trouver un moyen d’injecter ces valeurs. Ceci est notamment possible avec MEF, c’est ce que nous allons voir tout de suite.

Silverlight 3 et 4 / MEF: durée de vie du ViewModel

Dans le cadre de ma mission, je développe en ce moment une application utilisant Silverlight. Nous avons décidé d’appliquer le pattern MVVM. Pour chaque page, nous avons donc un ViewModel assigné au DataContext, dans lequel sont injectés différents services nécessaires à nos besoins.

Pré-requis de l’application:

  • Utilisation de MEF, pour faire la résolution des ViewModels et de leurs services.
  • Lorsque l’on navigue sur une nouvelle page, celle-ci doit être dans le même état que lors du premier accès.

Lire la suite…

Categories: Silverlight Tags:

Silverlight – Développement d’un expander

Dans un projet récent, j’avais besoin de masquer certaines parties de la page. Je sais qu’il existe dans des librairies tierces des contrôles permettant de déjà réaliser cette opération. Cependant, il y a certains projets, où il est impossible d’utiliser ces librairies.

Ce que je vous propose dans ce billet c’est donc d’en développer un simple.

A quoi doit-il ressembler ?

Graphiquement, il sera composé de quatre parties:

  • une partie header pour afficher une description de la partie en question.
  • un bouton au niveau du header pour activer l’animation permettant de masquer ou afficher le contenu.
  • une partie dans laquelle se trouvera le  contenu à masquer ou à afficher.
  • Et un séparateur entre le header et le contenu à afficher.

Allez démarrons…

Silverlight – Gérer l’état Activé / désactivé d’un bouton avec une ICommand

Dans le développement d’une application Silverlight ou WPF, on a l’habitude d’utiliser les ICommand pour communiquer de manière découplée entre une View (V) et un ViewModel (VM).

Regardons d’un peu plus près de quelles propriétés / méthodes est constituée cette interface.

Lire la suite…

Silverlight – Modifier les styles au runtime

Lors d’une mission récente, un des pré-requis graphique était d’avoir des couleurs différentes au niveau de la  MainPage et des pages de la NavigationFrame en fonction du menu sélectionné.

Au travers de ce billet, nous verrons une solution qu’il est possible d’implémenter pour modifier les styles des différents contrôles au Runtime.

Lire la suite…