Partager via


Essayez ! Créer et appliquer un convertisseur de valeurs

Cette page s’applique à WPF et Silverlight 2

Un convertisseur de valeurs constitue un moyen pratique pour convertir des données d’un type dans un autre. Lorsque vous liez les propriétés des objets dans Microsoft Expression Blend à des valeurs de données ou à d’autres propriétés, les types de données 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 un champ tel que Visibility.Hidden dans une 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 les détails sur l’interface IValueConverter sur MSDN.

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

Cc295312.alert_note(fr-fr,Expression.10).gifRemarque :

La deuxième procédure de cette rubrique applique le convertisseur de valeur à l'aide d’une liaison élément-à-élément, qui n’est pas prise en charge dans Silverlight 2. Vous pouvez toutefois appliquer des convertisseurs de valeurs à des opérations de liaison de données qui utilisent une source de données CLR.

Pour créer une classe de convertisseur de valeurs

  • Collez le code ci-après dans un fichier nommé DoubleValueConverter.cs. Ce code contient les deux convertisseurs de valeurs suivants :

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

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Data;
    
    namespace Microsoft.Expression.Samples
    {
        /// <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>
        /// DoubleToIntegerValueConverter 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;
            }
        }
    }
    

Cc295312.7e183f1f-37d8-4dcb-980c-19a5d61ca087(fr-fr,Expression.10).gifHaut de la page

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

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

  1. Ajoutez le fichier DoubleValueConverter.cs à un projet dans Expression Blend. Dans le menu Projet, cliquez sur Ajouterun élémentexistant, naviguez jusqu’au fichier DoubleValueConverter.cs, puis cliquez sur Ouvrir.

    Cc295312.alert_note(fr-fr,Expression.10).gifRemarque :

    Assurez-vous que votre projet a été créé avec l’option de Langage Visual C#. Vous pouvez également générer le fichier DoubleValueConverter.cs dans un fichier .dll, puis ajouter une référence au fichier .dll dans votre projet.

  2. Générez le projet (Ctrl+Maj+B) pour que les classes du convertisseur de valeurs soient mises à la disposition du projet.

  3. Dans la Boîte à outils, ajoutez deux contrôles Label et un contrôle Slider sur la planche graphique. Disposez-les de telle sorte qu’ils aient de la place.

  4. Sélectionnez l’objet Slider sous Objets et chronologie si ce n’est déjà fait, puis définissez les propriétés suivantes sous Propriétéscommunes dans le panneau Propriétés :

    • Affectez à LargeChange la valeur 10. Cette modification incrémentale se produit lorsque vous cliquez sur le contrôle Slider.

    • Affectez à Maximum la valeur 2001. Les valeurs du contrôle Slider 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 Slider.

  5. Sélectionnez l’objet Label sous Objetsetchronologie si ce n’est déjà fait, puis cliquez sur la propriété Content sous Propriétés communes dans le panneau Propriétés. Cliquez sur Liaisonde données dans la liste déroulante qui apparaît. La boîte de dialogue Créer uneliaison dedonnées s’ouvre.

  6. Sous l’onglet Propriété del’élément, sélectionnez Slider dans l’arborescence d’éléments sous Élémentsde la scène.

  7. Sous l’onglet Propriété de l’élément, sélectionnez Toutes les propriétés dans la liste déroulante Afficher, puis sélectionnez Valeur : (Double) sous Propriétés. Le contenu du libellé est lié à la valeur du curseur.

  8. Cliquez sur le bouton Développer Cc295312.81e110f1-4068-4299-957d-0693cea95088(fr-fr,Expression.10).png dans la boîte de dialogue Créer uneliaison dedonnées pour afficher les paramètres avancés.

  9. En regard de la zone déroulante Convertisseur devaleurs, cliquez sur le bouton Ajouter un nouveau convertisseur de valeurs. La boîte de dialogue Ajouter un convertisseur de valeurs s’ouvre.

  10. Développez le nom de votre projet et l’espace de noms Microsoft.Expression.Samples, sélectionnez le convertisseur DoubleToIntegerValueConverter, puis cliquez sur OK.

    Cc295312.alert_tip(fr-fr,Expression.10).gifConseil :

    Si le convertisseur de valeurs ne s’affiche pas, vérifiez que vous avez ajouté le fichier source dans le projet et que vous avez généré le projet (Ctrl+Maj+B).

  11. Dans la boîte de dialogue Créer une liaison de données, cliquez sur Terminer. Le premier objet Label affiche à présent une représentation entière du curseur.

    Cc295312.alert_note(fr-fr,Expression.10).gifRemarque :

    Notez que votre objet curseur s’est vu attribuer le nom de Slider. 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 définit un nom pour vous.

  12. Répétez les étapes 5 à 11 avec le second libellé, mais sélectionnez le convertisseur DoubleToRomanNumeralValueConverter dans la boîte de dialogue Ajouter un convertisseur de valeurs.

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

Cc295312.7e183f1f-37d8-4dcb-980c-19a5d61ca087(fr-fr,Expression.10).gifHaut de la page