Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

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 Blend for Visual Studio à 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 sur les boîtes de dialogue de l'interface utilisateur, consultez IValueConverter Interface 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é.

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, consultez Ajouter ou supprimer une référence dans Blend.

Pour créer une classe de convertisseur de valeurs

  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.

    Conseil Conseil

    La construction compile les fichiers de code et met les classes à la disposition de 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 Blend.

Dans la procédure suivante, les convertisseurs de valeurs de la procédure précédente sont appliqués à la valeur d’un objet Slider 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 Slider.

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

  1. Dans le panneau Outils, cliquez avec le bouton droit sur le groupe d'outils du bas puis sélectionnez le contrôle SliderJJ170529.b478d0b9-7525-47cb-b633-0007e08432d4(fr-fr,VS.120).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 :

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

    • Définissez Maximum à 2001. Le curseur ira de 0 à 2001.

    • Définissez SmallChange à 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 le deuxième groupe d’outils en partant du bas puis sélectionnez le contrôle TextBox JJ170529.b5206bf1-18c8-491f-8239-3e542b2ca147(fr-fr,VS.120).png dans la liste qui s’affiche.

  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é Text sous Propriétés communes dans le panneau Propriétés. Vous lierez la propriété Text à la valeur de l’objet curseur.

  7. Cliquez sur Options avancées JJ170529.12e06962-5d8a-480d-a837-e06b84c545bb(fr-fr,VS.120).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 [Slider].

  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 JJ170529.de239c9d-42ce-4f5e-83b9-5f9924c0431f(fr-fr,VS.120).png, puis, en regard de Convertisseur de valeurs, cliquez sur Ajouter un nouveau convertisseur de valeurs JJ170529.3f9fe48b-caf8-4989-8a91-017ba1e0cb77(fr-fr,VS.120).png.

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

    Conseil Conseil

    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.

    Remarque Remarque

    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. 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.

    JJ170529.f1241b72-d14a-4de2-9d99-332418f84561(fr-fr,VS.120).png

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

    JJ170529.0279e814-a5af-4322-84d4-754083a57f83(fr-fr,VS.120).png
Afficher: