12/07/2013

[Converter] BoolToVisibility

Allez c'est sans conteste, le converter dont vous vous servirez le plus. Convertir un Boolean en Visibility

Bon je pense qu'il n'y a pas besoin d'explication supplémentaire sur l'intérêt de ce converter donc :

public class BoolToVisibilityConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            // Vérification de la valeur
            if (value == null)
            {
                return null;
            }
            else
            {
                var myBoolean = (bool)value;

                // Vérification du paramètre
                if (parameter != null)
                {
                    // Autant de paramètre qu'on veut
                    switch (parameter.ToString())
                    {
                        case "invert":
                            return myBoolean ? Visibility.Collapsed : Visibility.Visible;
                        default:
                            return myBoolean ? Visibility.Visible : Visibility.Collapsed;
                    }
                }
                else
                {
                    return myBoolean ? Visibility.Visible : Visibility.Collapsed;
                }
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

Pour en savoir plus sur les converter c'est par ici

Une notion abordée ici qui n'est pas abordée dans mon précédent article est le ConverterParameter qui sert tout simplement à passer un paramètre à mon converter. Dans ma classe, le paramètre invert permet d'inverser le résultat.


    
        
    


Il est à noter qu'en WPF le framework embarque directement le converter donc, il reste plus qu'à l'instancier dans notre code côté XAML :


      

A Lundi pour une nouvelle vidéo.

08/07/2013

[WindowsPhone] SystemTray et ProgressIndicator

Bonjour à toutes et à tous,
aujourd'hui ce sera le tour du SystemTray et du ProgressIndicator. Vraiment une fonctionnalité indispensable pour vos utilisateurs afin qu'ils puissent vérifier leur réseau avant d'incriminer votre application. ^^

SystemTray

Alors pour le SystemTray, il faut que celui ci soit bien défini comme visible dans la balise PhoneApplicationPage :

    shell:SystemTray.IsVisible="True"

Pour jouer sur l'opacité du SystemTray, ça se joue toujours au même endroit :

    shell:SystemTray.Opacity="0.5"

ProgressIndicator

Nous le retrouvons dans le namespace shell en tant que propriété de la SystemTray et on lui passe la classe ProgressIndicator disponible dans le shell :


   
      
      
   

Alors un petit conseil d'utilisation qui a été pas mal relayé: lorsque vous effectuer votre Binding ou que vous assignez la valeur IsVisible pensez à systématiquement affecter la même valeur à la propriété IsIndeterminate. Tout simplement parce que même si votre ProgressIndicator n'est plus visible, il continu de consommer des ressources pour l'aspect indéterminé.

Maintenant, nous avons également la possibilité de personnaliser le texte de ce ProgressIndicator qui devra être bien évidemment globalisé.

On modifie le fichier de ressources :

Et il ne nous reste plus qu'à effectuer notre Binding.


   
      
      
   

Le résultat sur l'émulateur:

Conclusion

Voilà c'est tout. Vous pouvez retrouver les sources ici.
Et la vidéo :

A bientôt.

05/07/2013

[Converter] ImagePicker

On inaugure aujourd'hui la catégorie des Converter en démarrant avec un sélecteur d'image.

Pour finir cette semaine tranquillement, je vous propose un sélecteur d'image :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Data;

namespace MyApp.WP8.View.Converter
{
    public class ImagePicker : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string matchString = Regex.Match(value.ToString(), @"(?<=<img.*?src=\"")[^\""]*(?=\"".*?((/>)|(>.*</img)))").Value;
            if (matchString == "")
            {
                return "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPgjvN03Mt9fpkGDo4AnQtOImddidJGYXbT18Yz7EyjBpt2NNrxZ1IvJXnCMNQEY-lNftZb66KYRznXWTCZSyH5HAkiRtD-JrMfbRaZQUzWUUz4PqOQlvlVFgu2zjV5YYlM3M0FMkyRUMN/s220/AvatarFB.png";
            }
            else
            {
                return matchString;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

Très utile notamment pour les flux RSS, il va nous permettre de renvoyer une image par défaut si notre item ne contient pas d'image.

Bon WE. A lundi pour un nouveau Tuto vidéo.

01/07/2013

[WindowsPhone] Application Bar

Bonjour à toutes et à tous,
je souhaitais commencer par quelque chose de simple pour ce premier article parce qu'en même temps je souhaite tenter un expérience nouvelle en proposant, en plus des sources mise à disposition en fin d'article, de réaliser une vidéo explicative consultable depuis le blog. Surtout n'hésitez pas à commenter pour si ça vaut le coup de continuer. Allez c'est parti...

Donc on démarre par le contrôle Application Bar. C'est pas le contrôle le compliqué du monde mais il faut bien connaître certaines spécificités notamment si l'on recherche à globaliser son application.

Application Bar



        
            
        
    

Comme vous le constatez, on va chercher la propriété ApplicationBar dans notre classe PhoneApplication qui se trouve dans le namespace Phone. Et Ensuite va chercher l'interface IApplicationBar qui elle se trouve dans le namespace shell (pour plus d'infos sur IApplicationBar).

Ensuite on dispose de deux collections d'éléments pour travailler :
  • Buttons (gére la collection d'objets de type ApplicationBarIconButton)
  • MenuItems (gére la collection d'objets de type ApplicationBarMenuItem)

Collection d'ApplicationBarIconButton

Alors ces ApplicationsBarIconButton vont fonctionner de la manière suivante :


        
            
        
    

  • le cercle autour des éléments est créé automatiquement
  • quelque soit la casse qui est utilisée, le texte sera affiché en minuscule
  • le mot représentant la commande ne devra pas dépasser environ 10 caractères sinon le reste ne sera pas affiché
  • Jusqu'à 4 éléments

Donc vous vous demandez maintenant comment je vais trouver de beaux boutons en flat design (modern UI). En fait vous les avez déjà et ils sont installés avec le SDK sur votre poste (C:\Program Files(x86)\Microsoft SDK\Windows Phone\[Version]\Icons\[Theme]\). Alors les principaux seulement mais de nombreux sites en propose.

Collection d'ApplicationBarMenuItem

Les ApplicationBarMenuItem doivent être défini dans la collection MenuItems de l'ApplicationBar:


        
            
            
                
            
        
    

Globalisation

Il est vrai qu'en développant à destination de "marchés" (App Store, Store, Marketplace, etc...) on souhaite toucher le plus grand nombre d'utilisateurs et bien souvent il faudra penser à globaliser son application. Lorsqu'on génère un projet, toute la mécanique est déjà en place.

Une des particularités de l'ApplicationBar est qu'on ne va pas pouvoir effectuer de Binding sur les propriétés "Text" par conséquent, on gère tout cela côté code behind:

        private void GeolocalizeApplicationBar()
        {
            var myResearchButton = (ApplicationBarIconButton)ApplicationBar.Buttons[0];
            myResearchButton.Text = AppResources.ApplicationBarResearch;

            var myResearchMenuItem = (ApplicationBarMenuItem)ApplicationBar.MenuItems[0];
            myResearchMenuItem.Text = AppResources.ApplicationBarResearch;         
        }
On fait donc un cast notre item que l'on va chercher dans les collections de la propriété ApplicationBar de notre PhoneApplicationPage et on lui affecte la valeur qu'on aura au préalable définie dans le fichier de ressources (cf. vidéo).

Conclusion

Bon voilà pour ce point vous pouvez retrouvez les sources du projets ici

Et voici la démo vidéo :


A bientôt

[WindowsPhone] Every saga has a beginning...

Bonjour à toutes et à tous,
comme j'en ai parlé dans mon précédent article, je commence aujourd'hui une série d'articles visant à montrer, dans le détail, comment intégrer au mieux vos projets d'application sur la plateforme Windows Phone. Que vous soyez intermédiaire ou débutant, vous devriez tous, je l'espère, trouver des informations intéressantes. (Désolé pour les ninjas du code, vous n'apprendrez rien ici puisque vous êtes déjà au top ! ^^). Et une nouvelle catégorie verra le jour à savoir "Converter" ou je ressemblerai les converter les plus utilisés.

Design Pattern - MVVM

De suite les mots qui fâchent, oui on y comprend rien, c'est compliqué ! Et pour les débutants quand on s'attaque un peu la théorie, on a l'impression que c'est une "usine à gaz". Pour celles et ceux qui ne l'on pas encore fait, je vous conseille de lire un livre sur le sujet en français, ici. D'autre part, pour garder tout le monde dans le rang je vais vous proposer une implémentation simplifié de ce design pattern, le temps de bien se familiariser avec lui.

Dans la mesure ou un dessin vaut parfois mieux qu'un long discours, voici comment s'articule une solution :

Donc dans notre implémentation MVVM (Model View ViewModel), Le Model lui va englober d'une part nos entités d'objets (POCO - Plain Old CLR Objects) et d'autre part l'accès au données (Repository). La vue se trouve directement à la racine de notre projet et contient tout les éléments graphiques (XAML) et enfin notre couche ViewModel va servir à rassembler les informations nécessaires obtenues de la couche Model et à le mettre à disposition de la vue.

Voilà, j'ai volontairement essayé d'être le plus concis possible. Vous pouvez retrouver les sources ici. Et je vous dis à très vite un premier article.

27/06/2013

[WindowsPhone] Gâteaux de Laetitia

Bonjour à toutes et à tous,
aujourd'hui, je viens faire un petit peu de pub pour ma dernière application Windows Phone. Alors oui c'est la dernière mais ça fait un petit moment qu'elle est sortie, puisque depuis hier vient d'être validé la version 2.1.1.1.

L'application

Bon peut-être que la plupart était au courant de la sortie de cette application puisque elle est officiellement sur le Store depuis le 1 Mai de cette année. Et j'informais sur mon profil Twitter de l'arrivée des diverses releases. Cette application gratuite vise à centraliser, simplifier et mettre en avant le blog de pâtisserie d'une certaine Laetitia...

Dans la mesure où la bloggeuse met en avant ces créations artistiques, il a fallu réaliser un gros boulot du côté du design. Des fois ce sont les choses les plus simples qui prennent le plus de temps :

lespetitsgateauxdelaetitia.blogspot.fr

Ensuite pour la partie applicative, la charte graphique était déjà définie par la bloggeuse :

lespetitsgateauxdelaetitia.blogspot.fr lespetitsgateauxdelaetitia.blogspot.fr lespetitsgateauxdelaetitia.blogspot.fr

Dans l'applicaiton, on retrouve l'ensemble du flux Blogger, lecture des articles in-App, photo des créations, flux Twitter. L'application n'est pas finie, des nouveautés sont encore dans les cartons.

Conclusion

Voilà comment j'ai occupé certaines de mes dernières soirées, n'hésitez pas à me laissez vos commentaires ou à aller noter cette application. Vous pouvez retrouver l'application ici.

Très prochainement, une série d'articles devraient arriver et on soulèvera un petit peu le capot de cette application pour voir l'implémentation dans le détail de certaines fonctionnalités.

18/06/2013

[Certification] 70-483 - Programming in C#

Bonjour à tous, aujourd'hui je fais un petit topo sur la certification 70-483 ("Programming in C#") qui est en fait la première certification du cursus Windows Store App. Je ne vais pas vous faire ici le listing des questions mais simplement vous donner une orientation générale pour accès vos révisions.

Donc tout d'abord, vous trouverez la documentation officielle de la certification ici, avec l'ensemble des compétences mesurées.

les sujets semblent vastes... c'est vrai mais une comparaison avec l'ancienne certification 70-536 montre qu'elles sont presque aussi vastes mais peut-être mais pointue pour la 70-483.

Donc les cartons, il faut de la logique sur les connexions à la base de données, de la connaissance sur le multi-Threading, de la maîtrise des design pattern simples et de la POO et de l'expérience en déploiement. Je pense que le niveau exigé peut tout à fait être atteint avec par exemple un profil passionné qui fait du projets basiques la journée et des projets sympas le soir et les Weekends.

Si jamais vous vous sentez juste dans un de ces domaines on peut toujours y arriver en travaillant et les livres officiels de certifications devraient être dispo au milieu du mois d'Août.