Converter

De Banane Atomic
Révision datée du 7 décembre 2017 à 14:22 par Nicolas (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

ValueConverter

Xaml.svg
<UserControl xmlns:my="clr-namespace:CurrentNameSpace">

    <UserControl.Resources>
        <my:MyConverter x:Key="myConverter"/>
    </UserControl.Resources>

    <TextBlock Text="{Binding Path=., Converter={StaticResource ResourceKey=myConverter}}" />
Csharp.svg
namespace CurrentNameSpace
{
    // L'attribut ValueConversion est optionel,
    // il permet de spécifier le type d'entrée et le type de sortie
    [ValueConversion(typeof(int), typeof(string))]
    public class MyConverter : IValueConverter
    {
        public object Convert(object values, Type targetType, object parameter, CultureInfo culture)
        {
            var binding1Value = (int)values;
            ...
            return ""; // un string
        }

        // Conversion inverse non-implémentée
        public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

MultiValueConverter

Xaml.svg
<UserControl xmlns:my="clr-namespace:CurrentNameSpace">

    <UserControl.Resources>
        <my:MyConverter x:Key="myConverter"/>
    </UserControl.Resources>

    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource ResourceKey=myConverter}">
            <Binding ... />
            <Binding ... />
        </MultiBinding>
    </TextBlock.Text>
Csharp.svg
namespace CurrentNameSpace
{
    // L'attribut ValueConversion n'est pas utilisé ici car il n'est pas adapté
    // au MultiValueConverter : il ne peut définir qu'un seul type d'entrée
    public class MyConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            var binding1Value = (int)values[0];
            var binding2Value = (string)values[1];
            ...
            return ""; // un string
        }

        // Conversion inverse non-implémentée
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}