Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

XAML : Les MultiBindings et MultiValueConverters

Il est souvent très pratique de faire des bindings depuis le code en XAML. Les convertisseurs sont à ce sujet très important. Ils servent par exemple pour convertir une propriété d'un type T vers un autre type U. Ils peuvent également servir pour convertir une valeur d'un type T vers une autre valeur du même type T, mais différente.

Par exemple, si vous souhaitez lier une propriété au double de la valeur d'une autre propriété, il faut utiliser un convertisseur :

public class DoubleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo
culture)
    {
        return (double
)value * 2.0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo
culture)
    {
        return (double
)value / 2.0;
    }
}

Des fois, lorsqu'on essaye d'utiliser toute la puissance du databinding avec XAML, on peut se retrouver coincé, car la valeur d'une propriété que l'on souhaiterait lier dépend de plusieurs autres propriétés. Avec un binding standard, il ne peut y avoir qu'une seule source. Il existe différentes façon de résoudre ce problème.

Mais la plus simple et la plus élégante est sans doute d'utiliser un IMultiValueConverter. Il s'agit d'un convertisseur qui prend en entrée plusieurs valeurs. En voici un exemple d'utilisation :

class HeightConverter : IMultiValueConverter
{
    private const int
WindowBorderSize = 16;
    private VideoPlayer
video;

    public
HeightConverter(VideoPlayer video)
    {
        this
.video = video;
    }

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double width = (double
)values[0] - WindowBorderSize;
        double height = (double
)values[1] - WindowBorderSize;
        double ratio = (double)video.Width / (double
)video.Height;
        double
result;
        if
(width / ratio > height)
            result = height;
        else
            result = width / ratio;
        return
result;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo
culture)
    {
        throw new Exception("The method or operation is not implemented."
);
    }
}

Après, il suffit d'utiliser {MultiBinding ...} dans le code XAML, au lieu de {Binding ...}.

Publié lundi 9 avril 2007 15:28 par RaptorXP
Classé sous : , , , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01