Partager via


Essayez ! Convertir des données d'un type vers un autre

Un convertisseur de valeurs constitue un moyen pratique pour convertir des données d’un type dans un autre. Lorsque vous liez une valeur de propriété d'un objet dans Microsoft Expression Blend à une valeur de données ou à une autre valeur de propriété, les types de valeur doivent correspondre. Vous pouvez ainsi convertir une chaîne de zone de texte telle que « 123 » dans sa valeur entière correspondante pour une barre de curseur, ou bien convertir une propriété telle que Visibility.Hidden en valeur booléenne, false par exemple. 

Un convertisseur de valeurs implémente l’interface IValueConverter dans du code, dans une classe Microsoft .NET Framework. Les méthodes Convert et ConvertBack doivent toutes deux être implémentées, car elles sont appelées par le moteur de liaison de données pour déplacer une valeur entre la source et la destination de la liaison. Pour plus d’informations, voir Interface IValueConverter sur MSDN.

Pour appliquer un convertisseur de valeurs, renseignez le champ Value Converter dans la boîte de dialogue Créer uneliaison dedonnées lorsque vous liez des données à une propriété.

Pour créer une classe de convertisseur de valeurs

Cette procédure fournit un exemple de classe .NET, rédigée en C#, qui peut être ajoutée uniquement à un projet utilisant déjà le C# pour ses fichiers code-behind. Toutefois, il existe plusieurs moyens d'ajouter du code à un projet. Vous pourriez aussi utiliser Microsoft Visual Studio pour compiler la classe en fichier .dll, puis ajouter une référence au fichier .dll dans votre projet.

Pour plus d’informations, voir Ajouter ou supprimer une référence.

  1. Cliquez avec le bouton droit sur votre projet dans le panneau Projets, puis cliquez sur Ajouter un nouvel élément.

  2. Dans la boîte de dialogue Nouvel élément, cliquez sur Classe, tapez DoubleValueConverter.cs dans le champ Nom, puis cliquez sur OK.

    Un nouveau fichier de code est créé, dans le langage utilisé par votre solution. Dans le cadre de cette procédure, ce langage est C#. Le fichier est ajouté à votre projet et ouvert sur la planche graphique.

  3. Dans le fichier DoubleValueConverter.cs, supprimez la définition de classe suivante :

    public class DoubleValueConverter
    {
        public DoubleValueConverter()
        {
            // Insert code required on object creation below this point.
        }
    }
    
  4. Remplacez le code supprimé par le code suivant, contenant les deux classes de convertisseurs de valeurs suivantes :

    • DoubleToIntegerValueConverter   Fournit une conversion bidirectionnelle entre une valeur double et un entier.

    • DoubleToRomanNumeralValueConverter   Fournit une conversion unidirectionnelle d’une valeur double en chaîne d’un chiffre romain.

        /// <summary>
        /// DoubleToIntegerValueConverter provides a two-way conversion between
        /// a double value and an integer.
        /// </summary>
        public class DoubleToIntegerValueConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter,
                  System.Globalization.CultureInfo culture)
            {
                return System.Convert.ToInt32(value);
            }
    
            public object ConvertBack(object value, Type targetType,
                object parameter, System.Globalization.CultureInfo culture)
            {
                return System.Convert.ToDouble(value);
            }
    
        }
    
        /// <summary>
        /// DoubleToRomanNumeralValueConverter provides a one-way conversion from
        /// a double value to a string representation of a Roman numeral.
        /// </summary>
        public class DoubleToRomanNumeralValueConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter,
                System.Globalization.CultureInfo culture)
            {
                return this.ConvertToRomanNumeral(System.Convert.ToInt32(value));
            }
    
            public object ConvertBack(object value, Type targetType,
                object parameter, System.Globalization.CultureInfo culture)
            {
                return null;
            }
    
            private List<IntegerStringPair> romanStrings = null;
    
            private string ConvertToRomanNumeral(int input)
            {
                StringBuilder myBuilder = new StringBuilder();
    
                foreach (IntegerStringPair thisPair in this.PairSet)
                {
                    while (input >= thisPair.Value)
                    {
                        myBuilder.Append(thisPair.StringValue);
                        input -= thisPair.Value;
                    }
                }
    
                return myBuilder.ToString();
            }
    
            private List<IntegerStringPair> PairSet
            {
                get
                {
                    if (this.romanStrings == null)
                    {
                        this.romanStrings = new List<IntegerStringPair>();
                        this.romanStrings.Add(new IntegerStringPair(1000, "M"));
                        this.romanStrings.Add(new IntegerStringPair(900, "CM"));
                        this.romanStrings.Add(new IntegerStringPair(500, "D"));
                        this.romanStrings.Add(new IntegerStringPair(400, "CD"));
                        this.romanStrings.Add(new IntegerStringPair(100, "C"));
                        this.romanStrings.Add(new IntegerStringPair(90, "XC"));
                        this.romanStrings.Add(new IntegerStringPair(50, "L"));
                        this.romanStrings.Add(new IntegerStringPair(40, "XL"));
                        this.romanStrings.Add(new IntegerStringPair(10, "X"));
                        this.romanStrings.Add(new IntegerStringPair(9, "IX"));
                        this.romanStrings.Add(new IntegerStringPair(5, "V"));
                        this.romanStrings.Add(new IntegerStringPair(4, "IV"));
                        this.romanStrings.Add(new IntegerStringPair(1, "I"));
                    }
    
                    return this.romanStrings;
                }
            }
        }
    
        /// <summary>
        /// IntegerStringPair provides an easy way to store integer and string pairs.
        /// </summary>
        public class IntegerStringPair
        {
            private int value;
            private string stringValue;
            public int Value
            {
                get
                {
                    return this.value;
                }
            }
            public string StringValue
            {
                get
                {
                    return this.stringValue;
                }
            }
            public IntegerStringPair(int value, string stringValue)
            {
                this.value = value;
                this.stringValue = stringValue;
            }
        }
    
  5. Construisez (Ctrl+Maj+B) votre solution pour voir s'il existe des erreurs.

    Cc295312.alert_tip(FR-FR,Expression.30).gifConseil :

    La construction compile les fichiers de code et met les classes à la disposition de Expression Blend (par exemple, dans la boîte de dialogue Créer une liaison de données). Si vous ajoutez de nouvelles classes à votre fichier de code, vous devrez reconstruire votre solution pour la mettre à disposition de Expression Blend.

Pour appliquer un convertisseur de valeurs à une propriété

Dans la procédure suivante, les convertisseurs de valeurs de la procédure précédente sont appliqués à la valeur d’un objet Curseur lorsque celle-ci est liée à deux objets TextBox. Le résultat est l’affichage par les zones de texte des représentations en nombres entiers et en chiffres romains de la valeur du Curseur.

  1. Dans le panneau Outils, cliquez avec le bouton droit sur le groupe d'outils inférieur, puis sélectionnez le contrôle Curseur Cc295312.b478d0b9-7525-47cb-b633-0007e08432d4(FR-FR,Expression.30).png dans la liste qui apparaît.

  2. Dessinez un contrôle curseur sur la planche graphique dans votre document principal.

  3. Après avoir sélectionné le nouvel objet curseur, recherchez les propriétés suivantes sous Propriétés communes dans le panneau Propriétés et définissez leurs valeurs comme suit :

    • Affectez à LargeChange la valeur 10. Cette modification incrémentale se produit lorsque vous cliquez sur la barre du curseur.

    • Affectez à Maximum la valeur 2001. Les valeurs du curseur sont comprises entre 0 et 2001.

    • Affectez à SmallChange la valeur 1. Cette modification incrémentale se produit lorsque vous utilisez les touches fléchées pour déplacer le contrôle curseur.

  4. Dans le panneau Outils, cliquez avec le bouton droit sur l'avant-dernier groupe d'outils au bas de la page, puis sélectionnez le contrôle TextBox Cc295312.b5206bf1-18c8-491f-8239-3e542b2ca147(FR-FR,Expression.30).png dans la liste qui apparaît.

  5. Dessinez deux contrôles de zone de texte sur la planche graphique en regard de l'objet curseur.

  6. Après avoir sélectionné le premier objet de zone de texte, recherchez la propriété Texte sous Propriétés communes dans le panneau Propriétés. Vous lierez la propriété Texte à la valeur de l'objet curseur.

  7. Cliquez sur Options de propriétés avancées Cc295312.12e06962-5d8a-480d-a837-e06b84c545bb(FR-FR,Expression.30).png, puis sur Liaison de données dans la liste qui apparaît.

  8. Dans la boîte de dialogue Créer une liaison de données, cliquez sur l'onglet Propriété de l'élément. C'est à cet endroit que vous liez les valeurs internes à des propriétés.

  9. Développez l'arborescence des éléments sous Éléments de la scène, puis sélectionnez l'objet [Curseur].

  10. Sous Propriétés, sélectionnez Valeur : (Double).

    Cela lie le contenu de la zone de texte à la valeur du curseur.

  11. Cliquez sur Afficher les propriétés avancées Cc295312.de239c9d-42ce-4f5e-83b9-5f9924c0431f(FR-FR,Expression.30).png, puis, en regard de Convertisseur de valeurs, cliquez sur Ajouter un nouveau convertisseur de valeurs Cc295312.3f9fe48b-caf8-4989-8a91-017ba1e0cb77(FR-FR,Expression.30).png.

  12. Dans la boîte de dialogue Ajouter un convertisseur de valeurs, sélectionnez DoubleToIntegerValueConverter, puis cliquez sur OK.

    Cc295312.alert_tip(FR-FR,Expression.30).gifConseil :

    Si le convertisseur de valeurs ne s’affiche pas, vérifiez que vous avez ajouté le fichier créé dans la procédure précédente, DoubleValueConverter.cs, au projet et que vous avez généré votre projet (Ctrl+Maj+B).

  13. Dans la boîte de dialogue Créer une liaison de données, cliquez sur OK.

    Le premier objet Label affiche à présent une représentation entière du curseur.

    Cc295312.alert_note(FR-FR,Expression.30).gifRemarque :

    Notez que votre objet curseur s’est vu attribuer le nom de curseur. Les objets de votre application doivent être nommés afin de pouvoir être référencés en tout point de l’application, par exemple pendant la liaison de données. Expression Blend crée un nom pour vous.

  14. Répétez les étapes 6 à 13 avec la deuxième zone de texte, mais cette fois, sélectionnez le convertisseur DoubleToRomanNumeralValueConverter dans la boîte de dialogue Ajouter un convertisseur de valeurs.

  15. Exécutez votre projet (F5). Déplacez le curseur afin d’afficher les valeurs mises à jour dans les deux libellés.

    Cc295312.f1241b72-d14a-4de2-9d99-332418f84561(FR-FR,Expression.30).png

    Sans utiliser de convertisseur de données, une zone de texte affichant la valeur d'un curseur présenterait de nombreuses décimales.

    Cc295312.0279e814-a5af-4322-84d4-754083a57f83(FR-FR,Expression.30).png

Voir aussi

Tâches

Lier un objet à la saisie utilisateur ou à d'autres valeurs internes

Concepts

Appliquer un style à un contrôle d'affichage de données

Affichage de données