105 votes

Comment passer un entier en tant que ConverterParameter?

J'essaie de me lier à une propriété entière:

 
<RadioButton Content="None"
             IsChecked="{Binding MyProperty,
                         Converter={StaticResource IntToBoolConverter},
                         ConverterParameter=0}" />
 

et mon convertisseur est:

 
[ValueConversion(typeof(int), typeof(bool))]
public class IntToBoolConverter : IValueConverter
{
    public object Convert(object value, Type t, object parameter, CultureInfo culture)
    {
        return value.Equals(parameter);
    }

    public object ConvertBack(object value, Type t, object parameter, CultureInfo culture)
    {
        return value.Equals(false) ? DependencyProperty.UnsetValue : parameter;
    }
}
 

le problème est que lorsque mon convertisseur est appelé, le paramètre est string. J'ai besoin que ce soit un entier. Bien sûr, je peux analyser la chaîne, mais dois-je le faire?

merci pour toute aide konstantin

129voto

jpierson Points 3871

Vous y allez!

 <RadioButton Content="None"
             xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <RadioButton.IsChecked>
        <Binding Path="MyProperty"
                 Converter="{StaticResource IntToBoolConverter}">
            <Binding.ConverterParameter>
                <sys:Int32>0</sys:Int32>
            </Binding.ConverterParameter>
        </Binding>
    </RadioButton.IsChecked>
</RadioButton>
 

L'astuce consiste à inclure l'espace de noms pour les types de système de base, puis à écrire au moins la liaison ConverterParameter sous forme d'élément.

4voto

Aliostad Points 47792

N'utilisez pas value.Equals . Utilisation:

   Convert.ToInt32(value) == Convert.ToInt32(parameter)
 

0voto

SKG Points 725

Il serait bien d’exprimer d’une manière ou d’une autre les informations de type pour ConverterValue en XAML, mais je ne pense pas que ce soit possible pour le moment. Je suppose donc que vous devez analyser l'objet de conversion selon le type que vous attendez selon une logique personnalisée. Je ne vois pas d'autre moyen.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X